Microsoft Excel:

  Таблицы и VBA. Справочник.
  Вопросы и Ответы. Советы. Примеры.
Меню Справочник | VBA | Инструкция With


Rambler's Top100


Counter CO.KZ
Инструкция With впервые появилась в Visual Basic for Application (VBA) в MS Excel 95.

Основные преимущества инструкции With :
  • Уменьшает размер об'ем VBA кода
  • Делает его производительней

    Для того, чтобы убедиться в этом, нам надо сравнить два VBA кода.

    Пример :

    Sub TestNoWith()

    ActiveWorkbook.Worksheets(1).Range("A1").Value = "S.O.S."
    ActiveWorkbook.Worksheets(1).Range("A1").Font.Name = "Arial"
    ActiveWorkbook.Worksheets(1).Range("A1").Font.Bold = True
    ActiveWorkbook.Worksheets(1).Range("A1").Font.Strikethrough = True
    ActiveWorkbook.Worksheets(1).Range("A1").Font.Size = 20
    ActiveWorkbook.Worksheets(1).Range("A1").Font.ColorIndex = 3

    End Sub


    В этом примере мы использовали свойство Value об'екта Range для ввода в ячейку определённого значения, а также изменили некоторые свойства об'екта Font, для изменения представления введённых в ячейку данных, т.е проще говоря применили форматирование

    Для этого нам пришлось обращаться к об'ектам и их свойствам 23 раза, если считать по числу точек в инструкциях. При этом на обработку каждого обращения уходит некоторое количество времени.

    Пример, c использованием инструкции With :

    Sub TestYesWith()

    With ActiveWorkbook.Worksheets(1).Range("A1")
    .Value = "S.O.S."
    .Font.Name = "Arial"
    .Font.Bold = True
    .Font.Strikethrough = True
    .Font.Size = 20
    .Font.ColorIndex = 3
    End With

    End Sub


    Во время выполнения этого VBA кода нам пришлось всего 13 раз использовать обращение к об'ектам и их свойствам. Так что мы можем быть уверены, что увеличили скорость выполнения этой программы. Последнее утверждение особенно актуально при работе с большим об'емом информации.

    На самом деле этот код также можно сократить, всего до 9 обращений.

    Пример использования инструкции With (сокращённый вариант) :

    Sub TestYesWith2()

    With ActiveWorkbook.Worksheets(1).Range("A1")

    .Value = "S.O.S."

    With .Font
    .Name = "Arial"
    .Bold = True
    .Strikethrough = True
    .Size = 20
    .ColorIndex = 3
    End With

    End With

    End Sub


    Совет : Если Вы обращаетесь к об'екту или его свойству всего один-два раза, то лучше обойтись без применения инструкции With.


    Воспроизведение любых опубликованных здесь материалов возможно только с письменного разрешения автора : Microsoft Excel 95, 97, 2000, XP
  • © 2004-2016 Климов П.Ю. Все права защищены. WebDesign & Error's Klimoff