На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! `
Не забудьте заглянуть в VB6 FAQ, так как большая часть VB-примеров актуальна и для VBA-раздела ;)
Модераторы: Old Bat, MIF
  
    > Работа с переменными
      Объявление переменных

      Если Вы заранее знаете, какой тип данных будет содержать используемая переменная – объявите ее. Используйте по возможности типы данных меньшей длины, т.к. при прочих равных условиях они работают быстрее. В противном случае необъявленная переменная будет иметь тип VARIANT и съест жирный кусок оперативной памяти. Да и код будет выполнен значительно медленнее, т.к. при работе с различными переменными часть времени уйдет на приведение типа.

      Если Вы хотите, чтобы VBA не оставил без внимания необъявленные переменные – пропишите «Option Explicit» в начале модуля или отметьте соответствующий чекбокс в свойствах VBE (Require variable declaration)

      Обратите внимание: тип данных LONG работает быстрее, чем BYTE при выполнении математических операций с целыми числами, т.к. VBA оптимизирован для работы с 32-разрядными операциями. Так что используйте тип LONG в операциях, не требующих учета дробной части (исключение – работа с байтовыми массивами или передача BYTE-переменной в функции WINAPI

      Используйте ранее связывание

      Если Вы определяете тип переменой как OBJECT , это значит, что Вы просите VBA опередить характеристики объекта во время выполнения кода. Если же Вы задаете конкретный тип объектной переменой,VBA может определить ее содержание еще на этапе компиляции, что значительно сократит время исполнения кода.
      Поэтому (если есть такая возможность) объявляйте тип объектной переменой как можно точнее:

      Например, вместо
      ExpandedWrap disabled
        Dim cmd as Control

      или, что еще хуже
      ExpandedWrap disabled
        Dim cmd as Object

      сделайте так:
      ExpandedWrap disabled
        Dim cmd as CommandButton

      Кешируйте ссылки на объекты

      Если Вам нужна одна единственная ссылка на объект – оптимизировать здесь нечего. А вот если Вы обращаетесь с несколькими свойствам объекта или работаете с ним в цикле, то можете значительно ускорить обращения к объекту, запомнив ссылку на него в переменой и обращаясь к его свойствам через эту переменную.
      Не забывайте и об имеющемся операторе With…End With, делающим практически то же самое.

      Например, работаем с диапазоном ячеек:

      ExpandedWrap disabled
        Worksheets("Sheet1").Range("A1:C10").Value = 30
        Worksheets("Sheet1").Range("A1:C10").Font.Bold = True
        Worksheets("Sheet1").Range("A1:C10").Interior.Color = RGB(255, 255, 0)

      Можем заменить на
      ExpandedWrap disabled
        Set MyRange = Worksheets("Sheet1").Range("A1:C10")
            MyRange.Value = 30
            MyRange.Font.Bold = True
            MyRange.Interior.Color = RGB(255, 255, 0)

      Или так:
      ExpandedWrap disabled
        With Worksheets("Sheet1").Range("A1:C10")
                .Value = 30
                .Font.Bold = True
                .Interior.Color = RGB(255, 255, 0)
        End With

      Чем сильнее Вы сокращаете цепочку ссылок, тем больший выигрыш по времени получаете!


      Использованы материалы: "From Access 2002 Desktop Developer's Handbook"
      Litwin, Getz, and Gunderloy. (Sybex, 2001)
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0186 ]   [ 16 queries used ]   [ Generated: 19.04.24, 05:54 GMT ]