Что такое модуль? Какие бывают модули?
Что умеет Excel
Любой код VBA должен быть где-то записан. Для хранения кодов в VBA имеются модули. Имеется пять основных типов модулей. Модуль листа, модуль книги, стандартный модуль, модуль пользовательской формы, модуль класса. Вообще, если точнее, то всего-то два типа модуля — обычный и модуль класса, т.к. Модуль листа, модуль книги, модуль пользовательской формы и модуль класса по своей сути являются модулями классов. Но я специально разделил их на несколько типов, т.к. именно такие типы часто употребляются при пояснениях в различных учебниках и на всевозможных форумах.
Модуль листа(Лист1 или Sheet1) - на рис.2: Лист1(Лист1),Лист2(Лист2),Лист3(Лист3). Для каждого листа книги имеется свой отдельный модуль. Попасть в модуль листа проще, чем в остальные модули. Для этого надо просто щелкнуть правой кнопкой мыши по ярлычку листа и выбрать из контекстного меню пункт Исходный текст(рис.1).
рис.1
Можно и более трудным путем пойти — через редактор VBA: Alt+F11 и в окне Проводника объектов дважды щелкнуть по объекту с именем листа(рис.2).
рис.2
Если данное окно у Вас не отражается нужно нажать Ctrl+R либо в меню редактора VBA-View-Project Explorer(рис.3)
рис.3
В модуле листа содержатся встроенные событийные процедуры, каждая из которых отвечает за обработку определенного события на этом листе. Названия данных процедур носят достаточно информативные имена и не думаю, что нуждаются в расшифровке(Change — изменения значений ячеек на листе, SelectionChange — изменение адреса выделенной ячейки/области и т.д.). Посмотреть их можно так: выбираете в списке объектов(на рис.4 помечен 1) Worksheet, а в правом окне выбора процедур(на рис.4 помечен 2) Вы найдете все процедуры, доступные для выбранного листа. Процедуры, события для которых уже используются, выделены жирным шрифтом.
рис.4
Модуль книги(ЭтаКнига или ThisWorkbook) — на рис.2: ЭтаКнига. В модуль книги можно попасть только через редактор VBA описанным выше способом. Двойной щелчок по ЭтаКнига(ThisWorkbook). В модуле книги так же содержатся «встроенные» событийные процедуры. Так же как и для листа выбираете в списке объектов, только не Worksheet, а Workbook. В правом окне выбора процедур Вы найдете все процедуры, доступные для объекта ЭтаКнига.
Достаточно важный момент: если захотите познакомиться поближе с данными событийными процедурами, всегда обращайте внимание на переменные, которые передаются в качестве аргументов в процедуру. В большинстве случаев рекомендую использовать именно эти переменные, а не выдумывать всякие возможности для вычисления обекта, который послужил причиной возникновения события. Для события листа Worksheet_Change это переменная Target. Вставьте приведенный ниже код в модуль любого листа и поймете, что это значит.
Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "Адрес измененной ячейки: " & Target.Address, vbInformation, "Excel-VBA" End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "Адрес измененной ячейки: " & Target.Address, vbInformation, "Excel-VBA"
End SubПримечание: для всех кодов, приведенных на сайте, достаточно просто открыть необходимый модуль(книги или листа) и вставить предложенный код. Корректировка может понадобиться только в случаях, когда в модуле Листа или Книги Вашего файла уже имеется код в необходимой событийной процедуре.
Стандартный модуль(Module) - на рис.2 Module1. В основном именно в стандартных модулях содержится большая часть кодов. Для стандартных модулей нет предопределенных событийных процедур, поэтому в них процедуры пишутся полностью вручную(ну и макрорекордер записывает макросы тоже в эти модули). Как создать такой модуль? Ведь изначально его нет. А создать просто: в окне проводника объектов щелкаем правой кнопкой мыши-Insert-Module. И все. При записи макрорекордером модули создаются автоматически.
Модули форм(UserForm) — на рис.2 UserForm1. Содержаться внутри Пользовательской формы(UserForm) и её объектов. В Пользовательских формах в основном все завязано именно на событийных процедурах самой формы и на дочерних объектах этой формы(Кнопки, ТекстБоксы, КомбоБоксы и т.д.). Очень удобно использовать Пользовательские формы в своих приложения для, так сказать, общения с пользователем. Т.к. через формы очень удобно отслеживать действия пользователя и можно запретить доступ к листам с данными, путем их скрытия. Создается форма так же как и модуль: в окне проводника объектов щелкаем правой кнопкой мыши-Insert-UserForm.
Модуль класса(ClassModule) — на рис.2 Class1. В большинстве случаев создается специально для отслеживания событий различных объектов. Вряд ли понадобиться начинающим изучение VBA, хотя все зависит от поставленной задачи. В любом случае, перед работой с модулями классов лучше научиться хоть чуть-чуть работать с обычными модулями и самостоятельно писать продедуры. Создается: в окне проводника объектов щелкаем правой кнопкой мыши-Insert-Class Module.
Для того, чтобы создать новый модуль(Module), модуль класса(ClassModule) или пользовательскую форму(UserForm) надо просто в окне Проводника объектов(Project Explorer) щелкнуть правой кнопкой мыши, выбрать пункт Insert и затем тип добавляемого объекта(Module, ClassModule, UserForm).
Также см.:
→Копирование модулей и форм из одной книги в другую

28215

Здравствуйте. Скачал ваш пример, попробовал, мне пишут run-time error ’70′: Pernission denied. Что это значит? Как сделать, чтобы заработало?
Заранее благодарен.
Здравствуйте.
Не понимаю о каком примере идет речь. В данной статье вообще нет примеров для скачивания.