[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Оптимизация VBA
koralekДата: Пятница, 13.01.2012, 14:08 | Сообщение # 1
Подполковник
Группа: Администраторы
Сообщений: 147
Репутация: 0
Статус: Offline
На этой странице перечислены некоторые советы и стратегии по оптимизации Visual Basic For Applications (VBA) кода. Есть несколько абсолютных правил для оптимизации VBA, вы увидите увеличение производительности за счет оптимизации базовой логики.

Доступ ячеек в диапазоне

Вам не нужно использовать. Клетки метод для доступа к определенным ячеек в диапазоне. Например, вы можете использовать

Range("MyRange")(1,2) а не
Range("MyRange").Cells(1,2)

Смотрите Алан Beban в объяснение этого метода для более подробной информации.
С этим связана ускоренный метод ссылкой на клетки. VBA позволит вам ссылаться на ячейки с [A1], а не Range ("A1"). В то время как [A1] синтаксис легче ввести, это медленнее, чем выполнить Range ("A1") синтаксис.

Расчет режима

Как правило, Excel пересчитает ячейки или диапазона ячеек при том, что ячейки или диапазона на прецеденты были изменены. Это может привести к книге пересчитать слишком часто, что приведет к замедлению работы. Вы можете предотвратить Excel от переоценки книгу с помощью заявлением:

Application.Calculation = xlCalculationManual
В конце вашего кода, вы можете установить режим расчета обратно в автоматический с заявлением:

Application.Calculation = xlCalculationAutomatic
Помните, однако, что при расчете режима xlCalculationManual, Excel не обновляются значения в ячейках. Если ваш макрос основывается на обновлении ячейки значение, вы должны заставить события Calculate, с. Рассчитайте метод, который может быть применен либо определенного диапазона (Range ("Мой_диапазон"). Вычислить) или всей книги (Вычислить) .

Коллекция индексы

Отдельного элемента из коллекции объект может быть доступна либо его имя или его индекс в коллекции. Например, если у вас есть три листа ("Лист1", "Лист2" и "Sheet3") в книге ("MyWorkbook»), вы можете ссылаться на "Лист2" или с

Worksheets("Sheet2") or
Worksheets(2)

В общем, метод индексов (Worksheets(2)) значительно быстрее, чем метод имя индекса (Worksheets ("Лист2")).
Тем не менее, количество и порядок элементов в коллекции может меняться, поэтому, как правило, безопаснее и проще ссылаться на элементы в коллекции по имени, а не их порядковый номер.[b]
 
koralekДата: Пятница, 13.01.2012, 14:08 | Сообщение # 2
Подполковник
Группа: Администраторы
Сообщений: 147
Репутация: 0
Статус: Offline
Константы

Всякий раз, когда вы можете заявить, значения констант, а не переменные. Так как их значения не меняются, они вычисляются только один раз, когда ваш код компилируется, а не каждый раз, когда они используются во время выполнения.

Раннее связывание

Это тесно связано с конкретными декларации Тип объекта. Если вы собираетесь работать с другими приложениями, такими как Word, объявить OLE объект непосредственно, а не как переменную типа Object. Поступая таким образом, много накладных расходов производится во время компиляции ("Раннее связывание"), а не во время выполнения ("позднее связывание"). Например, можно использовать
Dim WordObj As Word.Application а не
Dim WordObj As Object

ДЛЯ КАЖДОГО Цикла

Когда цикл по коллекции, как правило, быстрее, чем Для каждого утверждения, а не использовать индекс. Например, первый цикл код быстрее, чем второй:
Dim WS as Worksheet
For Each WS In Worksheets
MsgBox WS.Name
Next WS

Dim i as Integer
For i = 1 To Worksheets.Count
MsgBox Worksheets(i).Name
Next i

Диапазон объектов Не Выбор объекта

Как правило, это не является необходимым, чтобы выбрать диапазон до работы с ним. Например, это более эффективно использовать

Range("A1").Font.Bold = True

А не

Range("A1").Select
Selection.Font.Bold = True
 
koralekДата: Пятница, 13.01.2012, 14:09 | Сообщение # 3
Подполковник
Группа: Администраторы
Сообщений: 147
Репутация: 0
Статус: Offline
Обновление экрана

Вы можете отключить обновление экрана так, чтобы Excel не выполняет обновление изображения на экране, как ваш код выполняется. Это может значительно ускорить ваш код.

В начале:
Application.ScreenUpdating=false

в конце
Application.ScreenUpdating=true

Будьте уверены, чтобы восстановить настройки для Правда в конце макроса. Старая версия Excel будет автоматически восстанавливать настройки; Excel97 нет.

Простые объекты, а не составные объекты

Если у вас есть, чтобы сделать неоднократные ссылки на объект, например диапазон, объявить объект этого типа, установите его на целевой объект, а затем использовать ваш объект для обозначения цели. Например,

Dim MyCell As Range
Set MyCell = Workbooks("Book2").Worksheets("Sheet3").Range("C3")
'....
MyCell.Value = 123

По прямой ссылки на MyCell, VBA может получить доступ к объекту напрямую, а не решения полный путь к объекту каждый раз. Этот метод полезен только тогда, когда вы обращаетесь к объекту несколько раз в течение выполнения кода.

Конкретные декларации Тип объекта

По возможности избегайте использования объекта или вариант типов данных. Эти типы данных требуют значительных накладных расходов для определения их типов. Вместо этого, используйте явные типы данных, такие как

Dim MySheet As Worksheet rather than
Dim MySheet As Object
Or
Dim NumRows As Long rather than
Dim NumRows As Variant

Это особенно верно с индексом переменных For Next петли, так как вариант типа должна быть пересмотрена каждой итерации цикла.

С заявлениями

Если вы используете несколько заявлением, в строку, которая распространяется на тот же объект, используйте с заявлением, а не полностью определенного объекта каждый раз. Например,

With Worksheets("Sheet1").Range("A1")
.Font.Bold = True
.Value = 123
End With

Функции рабочего листа

Вы можете использовать в Excel стандартные функции листа в код VBA, а не писать функции в VBA. Так как они полностью исполняемые инструкции в машинный код, а не интерпретировать VBA код, они работают намного быстрее. Например, можно использовать

MySum = Application.WorksheetFunction.Sum(Range("A1:A100"))

а не

For Each C In Range("A1:A100")
MySum = MySum + C.Value
Next C
 
msexcelДата: Пятница, 09.01.2015, 14:08 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 1
Репутация: 0
Статус: Offline
Вы уверены, что хорошо знаете эксель? Пройдите курс MS Excel Профессионал от специалистов ведущей международной консалтинговой компании. Вы научитесь работать в экселе в 2 раза быстрее и будете уверены, что решаете каждую задачу наиболее эффективным способом. Внимание! Осталось 3 места, до пятницы скидка 20%. Оставьте заявку по ссылке: http://msexcel.pro?ch=frm
 
Natali_ASDДата: Пятница, 09.01.2015, 15:55 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 1
Репутация: 0
Статус: Offline
Вы уверены, что хорошознаете эксель? Пройдите курс MS Excel Профессионал от специалистов ведущей
международной консалтинговой компании. Вы научитесь работать в экселе в 2 раза
быстрее и будете уверены, что решаете каждую задачу наиболее эффективным
способом. Внимание! Осталось 3 места, до пятницы скидка 20%. Оставьте заявку по
ссылке: http://msexcel.pro?ch=frm
 
  • Страница 1 из 1
  • 1
Поиск: