Быстрее ли VB, чем VBA и как сделать экспорт/импорт с Excel?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Anatole
Сообщения: 2
Зарегистрирован: 07 фев 2008, 16:08

Добрый день.
Есть макрос на VBA, скорость работы которого меня не устраивает. Суть работы макроса - считывает с рабочего листа Excel численные данные, обрабатывает по заданному алгоритму, результаты вываливает обратно на листы Excel.
Есть, ощущение, что если бы алгоритм был реализован в скомпилированном приложении на VB, то скорость бы возросла. Я знаю основы VBA, но никогда не занимался VB, потому хочу оценить насколько перспективна такая возможность решения проблемы. То есть будет ли реально приложение работать быстрее? Примерно во-сколько раз?
И через какие объекты или операторы из VB можно открыть нужную книгу Excel, считать данные с нужного диапазона, и как обратно создать в этой книге новый лист, разместить на них данных из массива и сохранить эту книгу?

С уважением, Анатолий
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

А как вы считываете данные с листа и как вы их обратно на лист переносите?
Anatole
Сообщения: 2
Зарегистрирован: 07 фев 2008, 16:08

В своей процедуре я считываю данные с рабочего листа Excel. Код конкретно такой:

For Row = 1 To NumRows + 1
WorkMas(Row, 1) = Sheets(DataSheet).Cells(Row + RowFirst - 1, 1)
WorkMas(Row, 2) = Sheets(DataSheet).Cells(Row + RowFirst - 1, 3)
WorkMas(Row, 3) = Sheets(DataSheet).Cells(Row + RowFirst - 1, 5)
WorkMas(Row, 4) = Sheets(DataSheet).Cells(Row + RowFirst - 1, 6)
WorkMas(Row, 5) = Sheets(DataSheet).Cells(Row + RowFirst - 1, 7)
WorkMas(Row, 6) = Sheets(DataSheet).Cells(Row + RowFirst - 1, 8)
Next Row

Здесь WorkMas() - рабочий массив.
Вывод делаю так:

Set PrintRange = Sheets(Sheets.Count).Range(Cells(1, 1), Cells(65001, 11 + Months))
PrintRange.Value = Result

Здесь Result() - массив с результатами, который я ставлю на последний (Sheets.Count) рабочий лист.
Ответить