VBA Excel. Программное создание модуля

Динамическое создание стандартного программного модуля из кода VBA Excel. Запись в стандартный модуль текста процедур. Программное удаление модуля.

Создание стандартного модуля

Стандартный программный модуль создается как новый элемент коллекции VBComponents проекта VBA:

Число (1) означает, что создается стандартный модуль, если заменить его на (3), будет создана форма.

Запись текста процедуры в модуль

Текст процедуры

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

Программная запись текста процедуры в модуль может быть осуществлена с помощью метода CodeModule.AddFromString или метода CodeModule.InsertLines.

Метод CodeModule.AddFromString

Метод CodeModule.AddFromString всегда записывает текст процедуры сразу после раздела Declarations и других строк, не относящихся к процедурам (например, комментарии). То есть, если в модуле уже есть процедуры, новая будет записана перед самой первой из них.

Пример кода VBA Excel, записывающего текст процедуры в программно созданный стандартный модуль «myModule» методом CodeModule.AddFromString:

Метод CodeModule.InsertLines

Метод CodeModule.InsertLines предназначен для построчной записи текста процедуры. Обычно этот метод используется для добавления строк в конце модуля. Перед вставкой новых строк можно определить с помощью свойства CodeModule.CountOfLines количество уже имеющихся строк и начать вставку следующих.

Пример кода VBA Excel, записывающего текст процедуры в программно созданный стандартный модуль «myModule» методом CodeModule.InsertLines:

Код с методом InsertLines выглядит несколько аккуратней из-за отсутствия амперсандов и ключевых слов переноса строки (vbNewLine), чем код с методом AddFromString.

Вставка кнопки на рабочий лист

Чтобы продемонстрировать работоспособность процедуры «MyNewSub», записанной в динамически созданный стандартный модуль, нам понадобится кнопка на рабочем листе, которую мы свяжем с этой процедурой.

Программная вставка кнопки из коллекции «Элементы управления формы» на активный рабочий лист Excel:

Пример кода в сборе

Динамическое создание стандартного модуля, программная запись в него процедуры «MyNewSub», вставка на рабочий лист кнопки из коллекции «Элементы управления формы» и назначение ей процедуры «MyNewSub»:

Вы можете скопировать процедуру «Primer» в стандартный модуль вашего проекта VBA, запустить ее и ознакомиться с результатами ее работы. Код записан и протестирован в Excel 2016.

Удаление стандартного модуля

Программное удаление стандартного модуля с именем «Module4» из проекта VBA Excel:

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

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

3 комментария для “VBA Excel. Программное создание модуля”

  1. Здравствуйте!
    Известно, что запись вида
    Cells(1, 1) = 15
    эквивалентна записи
    Cells(1, "A") = 15
    или записи
    dim x as Byte, y as Byte
    x=1
    y=1
    Cells(x, y) = 15

    А можно ли использовать в переменной букву?
    Что-нибудь такого плана:
    dim x as Byte, y as String
    x=1
    y="A"
    Cells(x, y) = 15

    Спасибо!

    1. Евгений

      Добрый день!
      В переменной можно использовать букву и ваш пример работает правильно:

      Только я бы рекомендовал вместо Dim x As Byte использовать Dim x As Long, чтобы выделенной памяти хватило переменной на количество строк всего листа.

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. При добавлении в комментарий кода VBA Excel, вставьте перед его началом тег <pre> и по окончании кода </pre>.