Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Модуль в vba excel

VBA Excel. Модуль, процедура, форма

Знакомство с понятиями модуль, процедура, форма в VBA Excel. Модули разных типов. Создание пользовательской формы. Встроенные диалоговые окна.

Модуль

Модули рабочей книги Excel представляют из себя файлы, предназначенные для создания и хранения программного кода в виде процедур (подпрограмм, функций и пользовательских свойств). Модули бывают нескольких типов.

Стандартный модуль

Стандартный модуль представляет из себя отдельный файл, встроенный в рабочую книгу Excel и принадлежащий всем объектам рабочей книги, взаимодействующим с модулями (Workbook, Worksheet, UserForm). Стандартный модуль можно экспортировать, импортировать и удалять. Его публичные процедуры с уникальными именами доступны во всех остальных модулях рабочей книги без дополнительной адресации. Для публичных процедур с неуникальными именами требуется указание имени модуля, из которого они вызываются.

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

  1. Откройте рабочую книгу Excel, в которую планируете добавить новый стандартный модуль, или создайте новую книгу в учебных целях.
  2. Откройте редактор VBA сочетанием клавиш Alt+F11.
  3. В окне редактора VBA нажмите на пункт меню «Insert» и в открывшемся списке выберите «Module».

Таким образом, вы создали новый стандартный модуль. В проводнике справа появилась папка «Modules» и в ней файл «Module1» (или «Module» с другим номером, если в вашей книге модули уже были). Такие же модули создаются при записи макросов встроенным рекордером.

Открыть или перейти в окно открытого стандартного модуля можно, дважды кликнув по его имени в проводнике, или открыв на нем правой кнопкой мыши контекстное меню и выбрав «View Code». Кроме того, все уже открытые модули доступны во вкладке «Window» главного меню.

Важное примечание: в Excel 2007-2016 книги с программными модулями сохраняются как «Книга Excel с поддержкой макросов (.xlsm)». Если вы добавили модуль в книгу «Книга Excel (.xlsx)», то, при ее сохранении или закрытии, программа Excel предложит сохранить ее как «Книга Excel с поддержкой макросов (.xlsm)», иначе изменения (созданные или импортированные модули) не сохранятся.

Модуль книги

Модуль книги принадлежит только объекту Workbook (Рабочая книга). Открыть или перейти в окно открытого модуля книги можно, дважды кликнув в проводнике на пункте «ЭтаКнига», или открыв на нем правой кнопкой мыши контекстное меню и выбрав «View Code». Кроме того, открытый модуль доступен во вкладке «Window» главного меню.

Модуль листа

Модуль листа принадлежит только объекту Worksheet (Рабочий лист). Открыть модуль листа можно, дважды кликнув в проводнике по его имени, или открыв на нем правой кнопкой мыши контекстное меню и выбрав «View Code». Кроме того, перейти в модуль листа можно из рабочей книги, кликнув правой кнопкой мыши по ярлыку этого листа и выбрав в контекстном меню «Просмотреть код». Открытый модуль доступен во вкладке «Window» главного меню.

Модуль формы

Модуль формы принадлежит только объекту UserForm (Пользовательская форма). Откройте редактор VBA сочетанием клавиш Alt+F11 и нажмите на пункт меню «Insert». В открывшемся списке выберите «UserForm». Таким образом вы создадите новую пользовательскую форму «UserForm1». В проводнике справа появилась папка «Forms» и в ней файл «UserForm1». Перейти в модуль формы можно, дважды кликнув по самой форме, или кликнув по имени формы в проводнике правой кнопкой мыши и выбрав в контекстном меню «View Code». Кроме того, открытый модуль доступен во вкладке «Window» главного меню.

Стандартных модулей в одной книге можно создать любое количество, модуль книги только один, модулей листов или форм только по одному для каждого экземпляра листа или формы.

Между открытыми окнами форм и модулей можно переходить, нажав в главном меню вкладку «Window», где перечислены все открытые модули и формы (активный объект отмечен галочкой).

Процедура

Процедуры в VBA Excel подразделяются на 3 типа:

  • Sub (подпрограмма),
  • Function (функция),
  • Property (пользовательские свойства).

Главное отличие функции от подпрограммы заключается в том, что функция возвращает результат вычислений, а подпрограмма – нет. Процедура Property предназначена для создания пользовательских свойств и управления ими (используется не часто).

В редакторе VBA Excel перейдите в стандартный модуль и нажмите на пункт меню «Insert». В открывшемся списке выберите «Procedure…». Появится окно с предложением ввести название процедуры, выбрать тип и зону видимости. Создайте пару процедур с разной зоной видимости, пусть одна будет Sub, а другая – Function. В промежутке между началом и концом процедуры пишется программный код.

Как сохранить программный код макроса? Что такое модули?

Одним из способов установки (сохранения) макросов на своем компьютере является копирование программного кода и его вставка с последующим сохранением в модуль проекта редактора Visual Basic.

Напомню, что язык Visual Basic for Applications (VBA) – полнофункциональный язык программирования, встроенный в различные приложения компании Microsoft, а также других разработчиков программного обеспечения. Код VBA создается в редакторе Visual Basic Editor. Макросы VBA сохраняются в файлах документов в Word и в файлах рабочих книг в Excel. Макросы сохраняются в специальной части файла, которая называется модулем. Модуль – это элемент проекта, в котором хранится программный код. Каждый документ Word, каждая рабочая книга Excel может содержать один или несколько модулей, а может и не содержать ни одного модуля. Модули, сохраняемые в документе или книге имеют общее название — Project (проект).

Модули делятся на два типа: стандартные модули и модули класса. Основное содержание модулей — это макросы и процедуры написанные на языке VBA. Процедура — совокупность команд или инструкций в модуле, выполняемых как одна программа. В VBA существуют процедуры-подпрограммы Subprogram и процедуры- функции Function. Процедура от макроса отличается наличием в программном коде переменных.

Читать еще:  В excel пропала панель инструментов

Стандартные модули содержат процедуры, которые не связаны с конкретным объектом. Стандартный модуль — это модуль, в который помещают процедуры Sub и Function, которые должны быть доступны для всех процедур в данном приложении.

Модуль класса отличается от стандартного модуля тем, что, кроме процедур содержит еще и описание объекта и используется для создания классов (объектов).

Перед тем как копировать и вставлять программный код макроса в модуль проекта, откроем редактор Visual Basic. Чтобы запустить этот редактор, выберите команду Сервис/Макрос/Редактор Visual Basic, если Вы используете MS Office 2003, либо сочетанием клавиш Alt+F11 (универсальный способ вызова редактора для любых версий). Редактор открывается в новом окне, содержащем несколько панелей, расположением которых можно управлять. На рисунке ниже обозначены три стандартные панели.

1. Основное место занимает самая большая из них — область разработки. Эта панель используется для написания кода программ. При наличии готовых макросов их код отображается в области разработки.

2. На панели проектов представлен список всех составляющих объектов проекта, по умолчанию это три листа (электронные таблицы) и рабочая книга.

3. На панели свойств отображаются все свойства, ассоциированные с выбранным объектом. Изменения, которые вносятся на панель свойств, влияют на свойства объекта. Кроме того, изменения в области разработки отражаются в значениях величин, которыми определяются свойства объекта.

В проект можно добавлять дополнительные объекты. Код программы, который не связан с определенным объектом (например с листом или формой), обычно хранится в модуле.

Если в списке проекта отсутствует модуль Module1, то перед записью макроса его нужно добавить. Кроме того, можно добавлять объекты формы, создавая в программе графические интерфейсы пользователя.

Для вставки модуля в проект, выберите в меню редактора VBA команду Insert/Modul, либо воспользуйтесь контекстным меню, щелкнув правой кнопкой мыши в области панели проектов и выбрав пункт меню, как показано на картинке ниже. В список проекта будет добавлен модуль с именем Module1.

Можно дважды щелкнуть на этом имени в списке проекта и переименовать модуль. Переименование как раз будет происходить в третьей из основных панелей редактора, отображающей свойства элементов проекта.

Таким образом сохранение макросов на своем компьютере можно описать следующей последовательностью шагов:

  1. Находите и копируете в буфер обмена код макроса;
  2. Открываете на своем компьютере редактор Visual Basic (Alt+F11), выбираете существующий (или при необходимости добавляете новый) модуль;
  3. Вставляете в свой модуль данные из буфера обмена;
  4. Сохраняете внесенные изменения.
  5. Вызываете список своих макросов сочетанием клавиш Alt+F8, выбираете и запускаете нужный Вам макрос.

Если вдруг после копирования кода макрос не запускается, рекомендую внимательно прочитать статью «Что делать если макрос не работает?». Модули проектов можно импортировать и экспортировать.

Модуль в vba excel

Дата публикации статьи: 25.02.2004 15:09

Виталий Тихвинский
Обработка модулей VBA


Введение

Проект – Файл приложения Microsoft Office, в котором написана программа VBA
Приложение – Приложение Microsoft Office (Word, Excel, Access, Power Point и др.)
Модуль – Именнованная область в файле проекта содержащая в себе код, написанный на языке VBA
Окно проекта – “дерево” , содержащее на себе все “деревья” загруженных проектов, “дерево” состоит из имен модулей.
Редактор VBA – редактор встроенный внутри приложения, позволяющий писать и редактировать программы на языке VBA.

Для перехода в редактор VBА можно воспользоваться пунктами меню: Сервис-Макросы-Редактор Visual Basic (Рис.1) (В Access выбрать закладку модулей или форм, выбрать мышью нужный объект, зайти в меню: Вид-Программа)
Для открытия окна проекта, необходимо воспользоваться пунктами меню редактора VBA: Вид-Дерево проекта (В Access 1997 его нет)
Двойным кликом мыши по папке с именами модулей можно открыть ее.
Двойным кликом мыши по имени модуля, можно активизировать окно редактора нужного вам модуля.

Рис 1 Редактор VBА(слева дерево проекта, активизирован редактор модуля “ПерехватКлавиш”, который виден в правой части окна VBA)

Примечание: В Access модули можно обрабатывать не заходя в редактор VBA, выбрав закладку Модули. В Access 1997 модули обрабатываются только через закладку Модули, т.к. окна проекта в этой версии Access не существует.

Переименование, Удаление, Создание, Добавление, Экспорт, Импорт модулей проекта

Все указанные в заголовке действия можно выполнить следующим образом:

  1. В редакторе VBA нажать правую клавишу мыши на дереве проекта на имени нужного нам модуля(или на любом имени имеющегося модуля, для того, что бы создать новый модуль)
  2. Выбрать соответствующий пункт меню (для создания модуля выбрать пункты: Вставить-модуль)

Импорт и экспорт модуля из проекта в проект

Импорт модуля через экспортируемый файл (а также модулей обычного VB)

Для пересылки модуля из проекта в проект можно воспользоваться следующим приемом:

  1. Экспортировать модуль из проекта в файл (в редакторе VBA нажать правую клавишу мыши на дереве проекта, на имени модуля, и выбрать пункт “Экспорт файла”)
  2. Импортировать модуль из файла в проект (данный файл может являться не только экспортируемым файлом из VBA приложения, но и быть модулем обычного VB)

В редакторе VBA нажать правую клавишу мыши на дереве проекта, на имени файла, и выбрать пункт “Экспорт файла”
Примечание: Экспорт и импорт модуля в Access 1997 осуществляется только через меню Файл, когда выбранна закладка модуля и имя соответствующего модуля.

Импорт модуля через организатор (только для Word приложения)

  1. Загрузить два проекта в приложение.
  2. Меню: Сервис-макросы
  3. Нажать кнопку “Организатор”
  4. В окне “Организатор” выбрать закладку макросы
  5. В окне “Организатор” выбрать имена проектов для пересылки и переслать нужные модули.

Редакция модуля

  1. В редакторе VBA кликнуть в окне проекта два раза по имени нужного нам модуля (см. рис 1)( В Access выбрать закладку Модули и имя соответствующего модуля, войти в меню Вид-Программа.).
  2. Перейти в активизированное окно редактора модуля (справа от окна проекта) и редактировать его.
  3. Из верхнего левого списка, расположенного вверху окна редактора модуля, можно выбирать либо раздел описания, либо имя нужной вам подпрограммы (В модуле Форм, Листов Excel, Книги Excel, Документа Word и т.п. из верхнего правого списка можно выбрать Общую Область, либо имя объекта (Листа, Книги, Документа и т.п.), либо имя элемента управления (который находится на соответствующем Листе, Книге, Документе и т.п.), при выбранном объекте, из правого списка выбирается имя события, для того, что бы активизировать соответствующую событийную процедуру объекта или элемента управления ).

Обработка модулей VBA программно

Под “ИмяПроекта” в программной конструкции подразумевается соответствующий объект. Для связи с книгой Excel предназначен объект — Workbooks(«Имя книги»), а для связи с документом Word объект — Documents(“Имя документа”). Объект для связи с документом, который содержит общие макросы приложения Word, имеет имя: NormalTemplate, в Excel приложении данный объект записывается следующим образом: Workbooks(«PERSONAL»).

Экспорт модуля проекта в файл

Импорт модуля проекта из файла

Импорт модуля через организатор(данный код только для Word приложения)

Вставка новых строк в модуль проекта

Где
№ — Номер строки в модуле с которой будут вставляться новые строки
S – Вставляемая строка символов
Примечание:
В переменной S могут содержаться коды символов конца строк , которые можно получить следующей функцией со следующим аргументом: CHR(13). Таким образом, переменная S может содержать в себе сразу несколько строк:

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

Где
№ — Номер строки в модуле с которой будут удаляться строки
Количество – количество удаляемых строк

Чтение строк из модуля

Где
№ — Номер строки в модуле с которой будут начинаться чтение строк
Количество – количество читаемых строк

Модули VBA

Любая программа на VBA представлена в виде проекта. Проект — это совокупность программных модулей различных типов. В свою очередь модуль — это основная программная единица уровня проекта, в которой размещаются определения переменных, констант, типов, подпрограмм и т.д.

Visual Basic поддерживает три типа модулей, которые могут быть включены в проект и использованы:

  • Стандартные модули — это модули, в которых можно описать доступные во всем проекте процедуры.
  • Модули классов содержат описание свойств, методов и событий пользовательских классов.
  • Модули форм содержат процедуры обработки событий, генерируемых элементами управления в формах проекта.

Структура модуля VBA включает два неявных (т.е. не требующих специального описания) раздела: общий (General) и объявлений (Declarations). В общем разделе задаются параметры среды (Option Base, Option Explicit), приводятся описания глобальных переменных, констант и типов. Раздел объявлений предназначен для описания процедур и функций.

Области видимости

VBA поддерживает две области видимости для переменных и подпрограмм: локальную и глобальную.

Локальные переменные определены на уровне подпрограммы с помощью ключевых слов Dim или Static. Они доступны только внутри этой подпрограммы и по выходу из нее уничтожаются. Глобальные переменные объявляются на уровне модуля. Такие переменные доступны:

  • для всех подпрограмм модуля, в котором они объявлены (при объявлении с ключевым словом Private, либо Dim);
  • для всего приложения – при объявлении с ключевым словом Public;

Подпрограммы VBA могут быть объявлены на двух уровнях – уровне проекта (Public) и уровне модуля (Private). Например:

По умолчанию используется уровень проекта.

При описании локальных переменных можно использовать ключевое слово Static. Такие переменные являются статическими и сохраняют значения между вызовами.

Встроенные функции VBA

В языке программирования VBA предусмотрено несколько десятков встроенных функций. Они доступны в любой программе на языке VBA, при этом безразлично, в среде какого программного продукта мы находимся — Excel, Word, Access или, к примеру, AutoCAD. Используются они очень активно, и во многих ситуациях без них не обойтись. Встроенные функции обычно группируют по назначению: математические, строковые, преобразования типов, логические и т.п. В справке по VBA имеется подробная информация о всех встроенных функциях. Здесь же приведем краткое описание только некоторых.

Функции приведения типов

Используются для конвертации типов данных. Вот перечень этих функций: CBool(), CByte(), CCur(), CDate(), CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr().

Просмотреть, что в итоге получилось, можно при помощи функции TypeName(), например:

Кроме того, еще несколько полезных для конвертации функций:

  • Str() — позволяет перевести числовое значение в строковое, при этом вставляет пробел впереди для положительных чисел.
  • Val() — извлекает из строки числовое значение (до первого нечислового символа, кроме точки). Очень удобно, когда вперемежку с числовыми данными прописываются единицы измерения или валюта.

Чтобы не возникло ошибок при конвертации, можно вначале проверять значения на возможность конвертации при помощи функций IsNumeric() и IsDate(). Для проверки на соответствие специальным значениям можно использовать функции IsArray(), IsEmpty(), IsError(), IsMissing(), IsNull() и IsObject(). Все эти функции возвращают True или False в зависимости от результатов проверки переданного им значения.

Строковые функции

  • Left(), Right(), Mid() — получить фрагмент строки слева, справа или из середины исходной строки соответственно.
  • Len() — получить число символов в строке.
  • LCase() и UCase() — перевести строку в нижний и верхний регистры соответственно.
  • LSet() и RSet() — заполнить строку символами без изменения длины (соответственно слева и справа). Лишние символы обрезаются, на место недостающих подставляются пробелы.
  • LTrim(), RTrim(), Trim() — убрать пробелы соответственно слева, справа или и слева, и справа.
  • Replace() — заменить в строке одну последовательность символов на другую.
  • StrComp() — сравнить две строки.
  • StrReverse() — «перевернуть» строку, разместив ее символы в обратном порядке.

Математические функции

Функций для работы с числовыми значениями в VBA очень много. Приведем только некоторые из них.

  • ABS() — эта функция возвращает абсолютное значение переданного ей числа.
  • Int(), Fix() и Round() позволяют по разному округлять числа: Int возвращает ближайшее меньшее целое, Fix() отбрасывает дробную часть, Round() округляет до указанного количества знаков после запятой.
  • Rnd() и команда Randomize используются для получения случайных значений. Обычный синтаксис при применении Rnd выглядит так:

Перед вызовом функции Rnd() следует выполнить команду Randomize для инициализации генератора случайных чисел.

  • Sgn() — позволяет вернуть информацию о знаке числа. Возвращает 1, если число положительное, -1, если отрицательное и 0, если проверяемое число равно 0.
  • Функции для работы с датой и временем

    Основные функции VBA для работы с датой/временем:

    • Date() — возвращает текущую системную дату.
    • Time() возвращает текущее системное время, а Now() — дату и время вместе.
    • DateAdd() — возможность добавить к дате указанное количество лет, кварталов, месяцев и так далее — вплоть до секунд.
    • DateDiff() — возможность получить разницу между датами.
    • DatePart() — возвращает указанную часть даты (например, только год, только месяц или только день недели).
    • DateSerial() — формирует значение даты на основе передаваемых символьных значений. То же самое делает DateValue(), отличия — в формате принимаемых значений. Аналогичным образом (для времени) работают TimeSerial() и TimeValue().
    • Day() (а также Year(), Month(), Weekday(), Hour(), Minute(), Second()) — специализированные заменители функции DatePart(), которые возвращают нужную часть даты.
    • MonthName() — возвращает имя месяца словами по его номеру. Возвращаемое значение зависит от региональных настроек. Если они русские, то вернется русское название месяца.
    • Timer() — возвращает количество секунд, прошедших с полуночи.

    Функции взаимодействия с пользователем

    Функция MsgBox() выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата.

    Формат функции MsgBox:

    • Prompt – строковое выражение, отображаемое как сообщение в диалоговом окне;
    • Title – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, в строку заголовка помещается имя приложения, из которого запускается программа VBA;
    • HelpFile – строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне; обычно это файл, который вы уже должны были создать с помощью Windows Help Compiler. Если этот параметр указан, необходимо также указать параметр Context;
    • Context – числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот параметр указан, необходимо указать также параметр HelpFile;
    • Buttons – числовое выражение, которое задает количество и тип кнопок в диалоговом окне MsgBox. Buttons указывает также кнопку по умолчанию в диалоговом окне и содержит ли это диалоговое окно стандартные значки Windows для предупредительных сообщений и запросов пользователя. Значения Buttons можно получить из справочной системы.

    Простой пример использования функции MsgBox:

    В данном примере MsgBox применяется не в виде функции, а в виде процедуры (т.е. не возвращает никакого значения). Следовательно, код выбранной кнопки нигде не сохраняется и не может быть использован. Чтобы определить, какая кнопка была нажата, MsgBox необходимо вызвать как функцию, т.е. сохранить возвращаемое значение в переменную (Листинг 17.

    Листинг 17. Использование MsgBox

    При выполнении этого макроса, когда пользователь выбирает кнопку Yes или No в переменной res сохраняется число, соответствующее выбранной кнопке.

    Вместо возвращаемых функцией MsgBox целочисленных значений удобнее пользоваться предопределенными константами VBA. В таб. 11 приведены возвращаемые значения констант функции MsgBox.

    Таблица 11. Возвращаемые значения функции MsgBox

    КонстантаОзначает, что пользователь нажал кнопку
    vbAbortСтоп (Abort)
    vbCancelОтмена (Cancel)
    vbIgnoreПропустить (Ignore)
    vbNoНет (No)
    vbOkОк
    vbRetryПовтор (Retry)
    vbYesДа (Yes)

    Дополним код листинга 17 проверкой возвращенного значения (листинг 18).

    Листинг 18. Проверка возращаемого значения MsgBox

    Функция InputBox() выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста, а затем возвращает значение типа String, содержащее текст, введенный в поле. Формат функции InputBox:

    • Prompt – строковое выражение, отображаемое как сообщение в диалоговом окне;
    • Title – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, в строку заголовка помещается имя приложения;
    • Default – строковое выражение, отображаемое в поле ввода и используемое по умолчанию, если пользователь не введет другую строку. Если этот параметр опущен, поле ввода изображается пустым;
    • Xpos и Ypos – числовые выражения, которые указывают местоположение окна ввода и являются координатами верхнего левого угла диалогового окна; Xpos – горизонтальное расстояние от левого края окна; Ypos – вертикальное расстояние от верхнего края окна. Если эти параметры опущены, диалоговое окно выравнивается по центру экрана;
    • HelpFile – строковое выражение, определяющее имя существующего файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот параметр указан, необходимо также указать параметр Context;
    • Context – числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот параметр указан, необходимо указать также параметр HelpFile.

    Приведем пример использования функции InputBox для получения имени пользователя.

    В результате выполнения этого макроса на экран последовательно выводятся диалоговые окна ввода и вывода (рис. 5).

    Ссылка на основную публикацию
    Adblock
    detector