Правила

Типы данных. Тип данных у object может быть любым типом класса или структуры или даже простейшим типом Visual Basic (например Integer). Платформа .NET Framework поддерживает все простейшие типы, а также классы или структуры, к членам которых можно получить доступ в блоке With.

Объявление. Необходимо объявить object перед блоком With. Невозможно объявить его уже в операторе With.

Число итераций. Блок With — это не итерационная конструкция. Если внутри блока не существует циклов, инструкции выполняются лишь раз.

Вложенные структуры. Структуры With...End With можно вкладывать друг в друга. Пример см. в разделе Практическое руководство. Выполнение нескольких действий над объектом (Visual Basic).

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

Также можно вложить друг в друга различные виды управляющих структур. Дополнительные сведения см. в разделе Вложенные структуры управления (Visual Basic).

Выход из структуры. Visual Basic не поддерживает Оператор Exit (Visual Basic) для передачи управления вовне из блока With. Если необходимо выйти до выполнения всех инструкций, поместите метку на оператор End With и для перехода к нему используйте Оператор GoTo. Дополнительные сведения см. в разделе Практическое руководство. Операторы меток (Visual Basic).

Невозможно передать управление извне блока With вовнутрь, или наоборот. Можно вызвать процедуру из блока, но управление вернется к следующей инструкции.

Доступ к другим объектам. После входа в блок With нельзя переназначить object до прохождения через инструкцию End With. Таким образом, можно получить доступ к методам и свойствам только заданного объекта без их полного описания. Можно использовать методы и свойства других объектов, однако необходимо указывать их имена полностью.

21. Процедуры — это самые важные функциональные блоки языка VBA. В VBA вы можете выполнить только программный код, который содержится в какой-либо процедуре (обычной в стандартном модуле, событийной для элемента управления на форме и т.п.). Иногда начинающие пользователи пытаются записать команды прямо в область объявлений стандартного модуля и не могут понять, почему они не выполняются (сообщений о ошибке при этом не выдается — просто этот код становится "невидим" для компилятора). Причина проста — в разделе объявлений модуля (когда в верхних списках показываются значения (General) и (Declarations) могут быть только объявления переменных уровня модуля и некоторые специальные инструкции для компилятора. Весь остальной программный код должен находится внутри процедур.

В VBA предусмотрены следующие типы процедур:

Процедура типа Sub (подпрограмма) — универсальная процедура для выполнения каких-либо действий.