Версия для печати

Что такое модуль? Какие бывают модули?

Что умеет 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 и затем тип добавляемого объекта(ModuleClassModuleUserForm).

Также см.:
Копирование модулей и форм из одной книги в другую

 



Поддержать автора сайта
Поделиться ссылкой
  1. 11 Октябрь 2011 в 12:13 | #1

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

  2. 11 Октябрь 2011 в 21:41 | #2

    Здравствуйте.
    Не понимаю о каком примере идет речь. В данной статье вообще нет примеров для скачивания.

  1. Пока что нет уведомлений.

Комментарий будет добавлен после проверки администратором.
Комментарии, не имеющие отношения к комментируемой статье, будут удаляться без уведомления и объяснения причин. Если есть вопрос по проблеме в Excel- добро пожаловаться на Форум