Модули
Весь код должен располагаться внутри модулей. В языке VBA существует несколько типов модулей:
- модули листов — создаются автоматически при создании листов. Предназначены для размещения кода, который обрабатывает события листа. Чтобы отобразить содержимое модуля листа следует щелкнуть правой кнопкой мыши на вкладке листа и из контекстного меню выбрать пункт Исходный текст. Кроме того, можно открыть модуль из окна Project Explorer (если окно не отображается, то из меню View следует выбрать пункт Project Explorer или нажать комбинацию клавиш <Ctrl>+<R>). Для этого нужно сделать двойной щелчок на ярлыке листа или щелкнуть правой кнопкой мыши на ярлыке и из контекстного меню выбрать пункт View Code. Содержимое модуля будет отображено в отдельном окне. Более подробно модули листов мы рассмотрим при изучении обработки событий;
- модуль книги — создается автоматически при создании книги. Предназначен для размещения кода, который обрабатывает события книги. Отобразить содержимое модуля можно из окна Project Explorer. Для этого нужно сделать двойной щелчок на ярлыке ЭтаКнига или щелкнуть правой кнопкой мыши на ярлыке ЭтаКнига и из контекстного меню выбрать пункт View Code. Содержимое модуля будет отображено в отдельном окне. Более подробно модуль книги мы рассмотрим при изучении обработки событий;
- пользовательские модули — предназначены для размещения общего кода программы. Создать пользовательский модуль можно несколькими способами:
- из меню Insert выбираем пункт Module;
- в окне Project Explorer щелкаем правой кнопкой мыши на ярлыке любого листа (или на свободном месте) и из контекстного меню выбраем пункт Insert | Module;
- нажимаем кнопку Insert | Module на панели инструментов Standard.
Отобразить содержимое существующего модуля можно из окна Project Explorer. Для этого нужно сделать двойной щелчок на ярлыке модуля или щелкнуть правой кнопкой мыши на ярлыке модуля и из контекстного меню выбрать пункт View Code. Содержимое модуля будет отображено в отдельном окне;
- модули форм — предназначены для размещения кода, обрабатывающего события пользовательских форм. Более подробно модули форм мы рассмотрим при изучении создания пользовательских форм;
- модули классов — предназначены для размещения кода пользовательских классов. Более подробно модули классов мы рассмотрим при изучении классов в следующей главе.
Содержимое модулей делится на два раздела:
- раздел Declarations — расположен в самом начале модуля. В этом разделе объявляются глобальные переменные и константы, а также указываются различные опции, например, с помощью инструкции Option Base задается начальный индекс для массивов;
- раздел с описанием подпрограмм — содержит описания процедур, функций и свойств.
При отображении содержимого модуля в верхней части окна можно заметить два раскрывающихся списка. В левом списке (называется Object) содержатся доступные объекты, например, в модулях листов доступен объект Worksheet. Пользовательские модули вообще не содержат объектов. В правом списке (называется Procedure) содержатся названия подпрограмм, а, если выбрать объект из левого списка, то список с возможными процедурами обработки событий.
Изменить название модуля можно в окне Properties Window (если окно не отображается, то из меню View следует выбрать пункт Properties Window или нажать клавишу <F4>). Находим в таблице свойство Name и делаем двойной щелчок на ячейке справа от свойства. Ячейка станет доступной для редактирования.
Содержимое модуля можно сохранить в отдельном файле. Для этого в окне Project Explorer щелкаем правой кнопкой мыши на ярлыке модуля и из контекстного меню выбраем пункт Export File. В результате откроется окно в котором можно выбрать название и местоположение сохраняемого файла. Модули сохраняются в файлах с расширением bas . Чтобы загрузить модуль из файла следует в окне Project Explorer щелкнуть правой кнопкой мыши на ярлыке любого модуля и из контекстного меню выбрать пункт Import File. В открывшемся окне выбираем файл и нажимаем кнопку Открыть. В результате модуль будет загружен и его ярлык отобразится в окне Project Explorer.
Чтобы удалить модуль в окне Project Explorer щелкаем правой кнопкой мыши на ярлыке модуля и из контекстного меню выбраем пункт Remove <Название модуля>. В результате этого действия отобразится диалоговое окно в котором предлагается сохранить модуль в файл (кнопка Да), удалить без сохранения (кнопка Нет) или отказаться от удаления (кнопка Отмена).
Управление доступом к идентификаторам внутри модуля
Давайте создадим новый пользовательский модуль Module2, добавим в него объявление глобальной переменной и две подпрограммы, а затем попробуем получить доступ к идентификаторам из модуля Module1. Надеюсь вы не забыли способы создания пользовательских модулей. Если все-таки забыли, то обратитесь к предыдущему разделу. Код модуля Module2 приведен в листинге 9.23.
Листинг 9.23. Код модуля Module2
Теперь попробуем получить доступ к этим идентификаторам из модуля Module1. Исходный код модуля Module1 приведен в листинге 9.24.
Листинг 9.24. Код модуля Module1
Итак, процедура SetX() и функция GetX() доступны внутри модуля Module1 как если бы они были определены внутри модуля Module1. Однако, если внутри модуля Module1 окажется подпрограмма с именем SetX() или GetX() , то будет вызвана подпрограмма из модуля Module1, а не подпрограмма из модуля Module2. Чтобы сделать вызов подпрограммы более предсказуемым, следует перед именем подпрограммы указать название модуля и оператор . (точка). Если попробовать получить доступ к глобальной переменной x , то возникнет ошибка и программа будет остановлена.
Управлять доступом к идентификаторам внутри модуля позволяют следующие спецификаторы:
- Public — указывает, что идентификатор является открытым. Открытый идентификатор доступен для всех процедур текущего проекта, а также для процедур других проектов. Если в начале пользовательского модуля указана инструкция
то, область видимости открытого идентификатора ограничивается текущим проектом;
- Private — указывает, что идентификатор является закрытым. Закрытый идентификатор доступен только внутри модуля, в котором он объявлен.
Если спецификатор не указан, то:
- глобальные переменные являются закрытыми;
- подпрограммы являются открытыми.
При объявлении переменных спецификаторы Public и Private указываются вместо ключевого слова Dim :
При объявлении подпрограммы спецификаторы Public и Private указываются перед ключевыми словами Sub и Function :
Таким образом, если переписать код из листинга 9.23 и указать спецификаторы, то он будет эквивалентен следующему коду (листинг 9.25).
Листинг 9.25. Код модуля Module2
Статьи по Visual Basic for Applications (VBA)
Помощь сайту
Yandex-деньги: 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов
VBA – How to Rename or Delete a Module or Form
The first time you insert a module in VBA, it will automatically be given the name of “Module1” and subsequent module will become Module2, Module3 etc. Similarly, when you insert a UserForm it will be called UserForm1, UserForm2 etc.
Renaming a Module
To rename your module or form, you need to have the properties window switched on in your VBE.
If the properties windows is not showing, press F4 or go to the menu bar and select View > Properties Window.
- Click on the module you wish to rename in the Project Explorer.
- Select the name property in the Properties Window (a module will only have this property; a form has multiple properties)
3. Delete the module name (in this case Module1) and type in the name you want to call your module.
4. Press enter to rename the module.
You rename your forms in the same manner.
Delete a Module
Occasionally you may have the need to remove a module or form that you no longer need.
Right-click on the module or form you wish to remove to show the right click short cut menu.
Click Remove (in this case Module2)
Click on the File menu, and then click on Remove (Module2).
A warning box will appear asking if you want to Export the module or form before you remove it. Exporting the module or form enables you to save it as an individual file for use in a different Excel project at some other time.
More often than not when you remove a module or form it is because you do not need it, so click No.
Name Modules & Forms
It is good practice to rename modules and forms in order to give them more meaningful names. For example, if UserForm1 is going to be a form for entering invoice details, we can rename it to frmInvoices. Similarly, if Module1 is going to be used to hold some general functions that are going to be used repetitively throughout your code, you could rename it to basGeneral or modGeneral (depending on which naming conventions you like to use).
It is a good idea to be consistent with the naming conventions, both in naming your modules and forms, as well as the variables that you use within your code. You will notice that I have written the first 3 letters of the module or form name in lowercase, and have a capital letter at the beginning of the description for the module or form. This is known as CamelCase (https://en.wikipedia.org/wiki/Camel_case) and is a good habit to get into when naming your objects. I have also used the Leszynski naming convention which is often used by Visual Basic programmers. (https://en.wikipedia.org/wiki/Leszynski_naming_convention).
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
VBA Excel. Модуль (импорт, экспорт, удаление)
1. Откройте рабочую книгу Excel, в которую планируете импортировать модуль. Для импорта модуля в Личную книгу макросов, откройте любую книгу.
2. Откройте редактор VBA сочетанием клавиш Alt+F11 (в этом сочетании используется левая клавиша Alt). Обратите внимание на наличие в окне редактора VBA окна проводника «Project-VBAProject», обычно, расположенного слева. При отсутствии, отобразите его через главное меню, выбрав «View» — «Project Explorer».
3. В окне проводника «Project-VBAProject» найдите строку «VBAProject (ИмяКниги)», где «ИмяКниги» — это имя книги, в которую вы собираетесь импортировать модуль. Если вы желаете импортировать модуль в Личную книгу макросов, строка называется «VBAProject (PERSONAL.XLSB)». Если у вас нет Личной книги макросов — создайте ее.
4. У выбранной строки раскройте все крестики слева.
5. Откройте контекстное меню, кликнув правой кнопкой мыши на строке «ЭтаКнига», и выберите в нем пункт «Import File…».
6. В открывшемся окне выбора файла найдите импортируемый модуль с расширением .bas и дважды кликните по нему, или кликните один раз и нажмите кнопку «Открыть». Модуль импортирован и отобразился в проводнике под именем «Module» с очередным номером, независимо от имени импортируемого файла.
7. Если вы импортировали модуль в Книгу Excel 2007-2016 с расширением .xlsx, ее необходимо будет пересохранить как «Книга Excel с поддержкой макросов (.xlsm)», иначе импортированный модуль не сохранится.
Инструкцию с картинками вы можете посмотреть здесь в параграфе «Пользовательская функция «СуммаПрописью».
Экспорт модуля в редакторе VBA
1. Откройте рабочую книгу Excel, из которой вы планируете экспортировать модуль. Для экспорта модуля из Личной книги макросов, откройте любую книгу.
2. Откройте редактор VBA сочетанием клавиш Alt+F11 и в окне проводника «Project-VBAProject» найдите экспортируемый модуль.
3. Откройте контекстное меню, кликнув правой кнопкой мыши на экспортируемом модуле, и выберите в нем пункт «Export File…».
4. В открывшемся окне выберите папку, куда следует сохранить экспортируемый модуль, если необходимо, измените название сохраняемого файла, и нажмите кнопку «Сохранить». Модуль экспортирован и отобразился в выбранном каталоге с указанным именем и расширением .bas.
Удаление модуля в редакторе VBA
1. В окне проводника «Project-VBAProject» найдите удаляемый модуль.
2. Откройте контекстное меню, кликнув правой кнопкой мыши на удаляемом модуле, и выберите в нем пункт «Remove Module…» с номером удаляемого модуля.
3. VBA Excel предложит экспортировать модуль перед удалением, нажмите «Да», если хотите сохранить модуль, или «Нет», чтобы удалить без сохранения.
Как удалить стандартный модуль с помощью кода VBA Excel, смотрите в последнем параграфе статьи Программное создание модуля.
Программный экспорт-импорт модуля
Пример программного экспорта стандартного модуля «Module1» из книги «Книга2.xlsm» и импорта его в книгу «Книга3.xlsm» с помощью кода VBA Excel:
How do I delete Module1 using VBA?
I want to delete Module1 using VBA commands within the VBA editor for Excel. Is this possible?
1 Answer 1
It’s complicated. See this link to learn more about why.
In short this is what you need to do:
First you need to reference VBIDE
VBIDE The VBIDE is the object library that defines all the objects and values that make up VBProject and the Visual Basic Editor. You must reference this library to use the VBA Extensibility objects. To add this reference, open the VBA editor, open your VBProject in the editor, and go to the Tools menu. There, choose References . In the References dialog, scroll down to Microsoft Visual Basic for Applications Extensibility 5.3 and check that item in the list. You can add the reference programmatically with code like:
Next, you need to grant ‘Trust access to the Visual Basic Project’
Next, you need to enable programmatic access to the VBA Project. In Excel 2003 and earlier, go the Tools menu (in Excel, not in the VBA editor), choose Macros and then the Security item. In that dialog, click on the Trusted Publishers tab and check the Trust access to the Visual Basic Project setting.
In Excel 2007, click the Developer item on the main Ribbon and then click the Macro Security item in the Code panel. In that dialog, choose Macro Settings and check the Trust access to the VBA project object model.
Now you can add the code to delete the module:
Deleting A Module From A Project
This code will delete Module1 from the VBProject. Note that you cannot remove any of the Sheet modules or the ThisWorkbook module. In general, you cannot delete a module whose Type is vbext_ct_Document.