Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Введение в VBA для приложений MS OFFICEСтр 1 из 3Следующая ⇒
Введение в VBA для приложений MS OFFICE Подобно другим языкам программирования VBA позволяет создавать полностью автоматические программные продукты. Однако, прежде всего, VBA - это инструмент разработки приложений MS Office. Дело в том, что VBA является общей языковой платформой для всех приложений MS Office. Поэтому он встроен во все приложения: Excel, Word, Access и др. Это с одной стороны значительно расширяет функциональные возможности каждого приложения, а с другой позволяет объединять данные из нескольких приложений в одном документе. Например, можно открыть базу данных Access, проанализировать ее данные с помощью встроенных или созданных средств в Excel, а результаты анализа вывести в документ Word. Язык VBA является производным от языка Visual Basic (VB). Синтаксис этих языков одинаков. Основное различие их заключается в том, что VB имеет собственную среду разработки, а VBA использует среду, встроенную в приложение MS Office - редактор VBA. В силу этого, с помощью VB можно создать полностью самостоятельный программный продукт, в то время как проекты VBA могут быть выполнены только с помощью приложения, которое поддерживает VBA. Структура программ на VBA Программы на VBA хранятся в проектах. Проект содержит модули различных типов, а модули включают различные процедуры. Проект может содержать несколько модулей. Имеются следующие типы модулей: - стандартные модули - это модули, в которых можно описать доступные во всем проекте процедуры; - модули класса содержат описание объекта, который является членом класса. Процедуры, написанные в модуле класса, используются только в этом модуле. Среди модулей класса выделяют модули форм и отчетов, которые связаны с конкретной формой или отчетом. Модули форм и отчетов часто содержит процедуры обработки событий, которые срабатывают в ответ на событие в форме или отчете. Процедуры обработки событий используются для управления поведением форм и отчетов и их реакцией на действия пользователя типа щелчка мыши на кнопке. Модули содержат описания и процедуры - наборы описаний и инструкций, сгруппированных для выполнения. Существует три типа процедур: - процедура Sub - набор команд, с помощью которого можно решить определенную задачу. При ее запуске выполняются команды процедуры, а затем управление передается в приложение пакета MS Office или процедуру, которая вызвала данную процедуру. - процедура Function (функция) также представляет собой набор команд, который решает определенную задачу. Различие заключается в том, что такие процедуры обязательно возвращают значение, тип которого можно описать при создании функции. - процедура Property используется для ссылки на свойство объекта. Данный тип процедур применяется для установки или получения значения пользовательских свойств форм и модулей. Для создания модуля в любом приложении MS Office необходимо выбрать команду ленты Разработчик – Код – Visual Basic. В окне " Проект " необходимо в окне редактора выбрать команду меню Вставка, а далее тип модуля. Самое начало модуля называется общей областью, в которой располагаются общие описания, например, типа данных, используемого по умолчанию (DefТип), инструкция Option Explicit, требующая явного описания всех используемых в модуле переменных, а также описания общих (глобальных) для всех модулей и для данного модуля переменных. Операторы описания Объявление переменной производится одним из операторов Dim, Static, Private, Public, за которым следует имя переменной и необязательная часть с ключевым словом As, после которого задается тип переменной, например Dim name [As type]. Оператор Public используется только вне модуля, в его общей части и делает описываемую переменную доступной из всех процедур всех модулей проекта. Оператор Private служит для объявления переменной уровня модуля, доступной только процедурам данного модуля. Можно использовать также оператор Dim, но применение Private предпочтительнее как противоположное Public. Переменные могут быть объявлены внутри процедуры операторами Dim или Static. Такие переменные называют также локальными, поскольку доступны только в той процедуре, в которой они объявлены. Данное свойство (область видимости) позволяет использовать одинаковые имена переменных в разных процедурах, не опасаясь конфликтов или случайных изменений значений переменных. Время жизни локальных переменных, объявленных с помощью оператора Dim равно времени работы процедуры и по ее окончании значения таких переменных теряются. Переменные, объявленные с помощью оператора Static сохраняют свои значения в течении всего времени выполнения приложения. При повторном входе в процедуру, где описана такая переменная, ее значение сохраняется. Операторы Public и Private можно применять при описании констант и процедур, что позволяет указать их область видимости. Для процедур возможно также применение оператора Static, что позволяет сделать все переменные в процедуре статическими: Static Function Total (num) as Integer. Это приводит к тому, что все локальные переменные в процедуре становятся статическими, независимо от того, как они определены; операторами Static, Dim, Private или неявным образом. Операторы присваивания Инструкция Let Присваивает значение выражения переменной или свойству: [Let] имяПеременной = выражение Явное использование ключевого слова Let зависит от вкуса пользователя, обычно это слово опускают. Значение выражения может быть присвоено переменной, только если оно имеет совместимый с этой переменной тип данных. Невозможно присвоить строковое выражение числовой переменной или числовое выражение строковой переменной. Такая попытка приведет к ошибке во время компиляции. Переменным типа Variant могут присваиваться как строковые, так и числовые выражения. Однако обратное не всегда верно. Любое значение типа Variant, за исключением значения Null, допускает присвоение строковой переменной, но только значение типа Variant, которое может рассматриваться как число, может быть присвоено числовой переменной. Пользуйтесь функцией IsNumeric для определения возможности преобразования значения Variant в числовое значение. Внимание! Присвоение выражения с одним из числовых типов переменной с другим числовым типом данных преобразует значение выражения в тип данных результирующей переменной. Инструкция Let может быть использована для присвоения одной переменной-записи другой, только если обе переменные имеют одинаковый определяемый пользователем тип. Для присвоения переменных-записей различных определяемых пользователем типов используется инструкция LSet. Для присвоения переменным ссылок на объекты применяется инструкция Set. Управляющие структуры позволяют управлять последовательностью выполнения программы. Без операторов управления все операторы программы будут выполняться слева направо и сверху вниз. Однако иногда требуется многократно выполнять некоторый набор инструкций автоматически, либо решить задачу по-другому в зависимости от значения переменных или параметров, заданных пользователем во время выполнения. Для этого служат конструкции управления и циклы. VBA поддерживает следующие конструкции принятия решений: If... Then If... Then... Else Select Case Конструкция If... Then Конструкция If... Then применяется, когда необходимо выполнить один или группу операторов в зависимости от некоторого условия. Синтаксис этой конструкции позволяет задавать ее в одной строке или в нескольких строках программы: If условие Then выражение If условие Then выражение End If Обычно условие является простым сравнением, но оно может быть любым выражением с вычисляемым значением. Это значение интерпретируется как False (Ложь), если оно нулевое, а любое ненулевое рассматривается как True (Истина). Если условие истинно, то выполняются все выражения, стоящие после ключевого слова Then. Для условного выполнения одного оператора можно использовать как синтаксис для одной строки, так и синтаксис для нескольких строк (блоковую конструкцию). Следующие два оператора эквивалентны: If anyDate < Now Then anyDate = Now If anyDate < Now Then anyDate = Now End If Заметим, что синтаксис оператора If... Then для одной строки не использует оператор End If. Чтобы выполнить последовательность операторов, если условие истинно, следует использовать блоковую конструкцию If... Then... End If. If anyDate < Now Then anyDate = Now Timer.Enabled = False ' Запретить таймер. End If Если условие ложно, то операторы после ключевого слова Then не выполняется, а управление передается на следующую строку (или строку после оператора End If в блочной конструкции). Конструкция Select Case Конструкция Select Case является альтернативой конструкции If... Then... Else в случае выполнения блока, состоящего из большого набора операторов. Конструкция Select Case предоставляет возможность, похожую на возможность конструкции If... Then... Else, но в отличие от нее она делает код более читаемым при наличии нескольких вариантов выбора. Конструкция Select Case работает с единственным проверяемым выражением, которое вычисляется один раз при входе в эту конструкцию. Затем VBA сравнивает полученный результат со значениями, задаваемыми в операторах Case конструкции. Если найдено совпадение, выполняется блок операторов, ассоциированный с оператором Case: Select Case проверяемое_выражение Select Case проверяемое_выражение [Case список_выражений1 [блок_операторов1]] [Case список_выражений2 [блок_операторов2]] ... [Case Else [блок_операторовn]] End Select Каждый список выражений является списком из одного или более значений. Если в одном списке больше одного значения, они отделяются запятыми. Каждый блок операторов содержит несколько операторов или ни одного. Если окажется, что вычисленному значению проверяемого выражения соответствуют значения из нескольких операторов Case, то выполняется блок операторов, ассоциированный с первым оператором Case из всех найденных соответствий. VBA выполняет блок операторов, ассоциированный с оператором Case Else (заметим, что он необязателен), если не найдено ни одного соответствия проверяемого значения выражения и значений из всех списков операторов Case. Заметим, что конструкция Select Case вычисляет выражение только один раз при входе в нее, а в конструкции If... Then... Else вычисляются различные выражения для каждого оператора Elself. Конструкцию If... Then... Else можно заменить конструкцией Select Case, только если оператор If и каждый оператор Elself вычисляют одно и то же выражение. Операторы цикла. Циклы позволяют выполнить одну или несколько строк кода несколько раз. VBA поддерживает следующие циклы: - For...Next - For Each...Next - Do... Loop Конструкция For... Next. Когда число повторений известно заранее, используют цикл For... Next. В цикле For используется переменная, называемая переменной цикла или счетчиком цикла, которая увеличивается или уменьшается на заданную величину при каждом повторении цикла. Синтаксис этой конструкции следующий: For counter = start To end [Step increment] операторы Next [counter] Параметры counter (счетчик), start (начало цикла), end (конец цикла) и increment (приращение) являются числовыми. Примечание. Параметр increment может быть как положительным, так и отрицательным. Если он положителен, параметр start должен быть меньше или равен параметру end, иначе цикл не будет выполняться. Если параметр increment отрицателен, то параметр start должен быть больше или равен значению параметра end, чтобы выполнялось тело цикла. Если параметр Step не задан, то значение параметра increment по умолчанию равно 1. VBA выполняет цикл For в следующей последовательности: 1. Устанавливает значение переменной цикла counter в значение start. 2. Сравнивает значение переменной цикла counter и значение параметра end. Если переменная counter больше, VBA завершает выполнение цикла. (Если значение параметра increment отрицательно, то VBA прекращает выполнение цикла при условии, что значение переменной цикла counter меньше значения параметра end.) 3. Выполняет операторы тела цикла statements. 4. Увеличивает значение переменной цикла counter на 1 или на величину значения параметра increment, если он задан. 5. Повторяет шаги со 2 по 4. Вложенные циклы. Можно помещать структуры управления внутрь других структур управления (например, блок If... Then внутрь цикла For... Next). Говорят, что структура управления, помещенная внутрь другой структуры управления, является вложенной. Глубина вложения управляющих структур в VBA не ограничена. Для улучшения читаемости кода принята практика смещения тела конструкции принятия решения или цикла в программе в случае использования вложенных структур управления. При вложении в цикл одного или несколько других циклов говорят о вложенных циклах, в которых различают внешние (охватывающие) и внутренние (вложенные) циклы. Заметим, что первый оператор Next закрывает внутренний цикл For, а последний оператор Next закрывает внешний цикл For. Точно так же и для вложенных операторов If, операторы End If автоматически применяются для закрытия ближайшего к нему оператора If. Вложенные структуры Do... Loop работают подобным же образом: самый дальний оператор Loop соответствует самому дальнему оператору Do. При вводе/выводе элементов двумерного массива на рабочий лист Microsoft Excel удобно применять пользовательские процедуры ввода/вывода: Sub readcell(i As Integer, j As Integer, val As Variant) val = Лист1.Cells(i, j).Value End Sub Sub outcell(i As Integer, j As Integer, val As Variant) Лист1.Cells(i, j).Value = val End Sub где I - номер строки, j - номер столбца рабочего листа. SpinButton — счетчик SpinButton (счетчик, ворот) позволяет пользователю увеличивать и уменьшать числовую характеристику до тех пор, пока он не установит требуемое значение. Один щелчок кнопки прокрутки увеличивает или уменьшает значение свойства Value на величину, заданную свойством SmallChange. Как и для ScrollBar, интервал изменения числовой характеристики определяется значениями свойств Min и Max, вертикальная или горизонтальная ориентация счетчика — свойством Orientation, а задержка между повторными событиями Change — свойством Delay. Чтобы изменения Value были видны пользователю, счетчик надо связать с полем ввода или с меткой в процедуре обработки события Change так же, как для полосы прокрутки. ToggleButton — выключатель Элемент выключатель (ToggleButton) показывает, выбран/включен элемент или нет. По своим свойствам и поведению выключатель практически не отличается от элемента CheckBox. Внешнее их отличие в том, что флажок показывает свое состояние с помощью метки, стоящей рядом с его названием, а выключатель — через положение кнопки: «нажата»/ «отжата», при этом название пишется внутри прямоугольных границ кнопки. Введение в VBA для приложений MS OFFICE Подобно другим языкам программирования VBA позволяет создавать полностью автоматические программные продукты. Однако, прежде всего, VBA - это инструмент разработки приложений MS Office. Дело в том, что VBA является общей языковой платформой для всех приложений MS Office. Поэтому он встроен во все приложения: Excel, Word, Access и др. Это с одной стороны значительно расширяет функциональные возможности каждого приложения, а с другой позволяет объединять данные из нескольких приложений в одном документе. Например, можно открыть базу данных Access, проанализировать ее данные с помощью встроенных или созданных средств в Excel, а результаты анализа вывести в документ Word. Язык VBA является производным от языка Visual Basic (VB). Синтаксис этих языков одинаков. Основное различие их заключается в том, что VB имеет собственную среду разработки, а VBA использует среду, встроенную в приложение MS Office - редактор VBA. В силу этого, с помощью VB можно создать полностью самостоятельный программный продукт, в то время как проекты VBA могут быть выполнены только с помощью приложения, которое поддерживает VBA. Структура программ на VBA Программы на VBA хранятся в проектах. Проект содержит модули различных типов, а модули включают различные процедуры. Проект может содержать несколько модулей. Имеются следующие типы модулей: - стандартные модули - это модули, в которых можно описать доступные во всем проекте процедуры; - модули класса содержат описание объекта, который является членом класса. Процедуры, написанные в модуле класса, используются только в этом модуле. Среди модулей класса выделяют модули форм и отчетов, которые связаны с конкретной формой или отчетом. Модули форм и отчетов часто содержит процедуры обработки событий, которые срабатывают в ответ на событие в форме или отчете. Процедуры обработки событий используются для управления поведением форм и отчетов и их реакцией на действия пользователя типа щелчка мыши на кнопке. Модули содержат описания и процедуры - наборы описаний и инструкций, сгруппированных для выполнения. Существует три типа процедур: - процедура Sub - набор команд, с помощью которого можно решить определенную задачу. При ее запуске выполняются команды процедуры, а затем управление передается в приложение пакета MS Office или процедуру, которая вызвала данную процедуру. - процедура Function (функция) также представляет собой набор команд, который решает определенную задачу. Различие заключается в том, что такие процедуры обязательно возвращают значение, тип которого можно описать при создании функции. - процедура Property используется для ссылки на свойство объекта. Данный тип процедур применяется для установки или получения значения пользовательских свойств форм и модулей. Для создания модуля в любом приложении MS Office необходимо выбрать команду ленты Разработчик – Код – Visual Basic. В окне " Проект " необходимо в окне редактора выбрать команду меню Вставка, а далее тип модуля. Самое начало модуля называется общей областью, в которой располагаются общие описания, например, типа данных, используемого по умолчанию (DefТип), инструкция Option Explicit, требующая явного описания всех используемых в модуле переменных, а также описания общих (глобальных) для всех модулей и для данного модуля переменных. Операторы описания Объявление переменной производится одним из операторов Dim, Static, Private, Public, за которым следует имя переменной и необязательная часть с ключевым словом As, после которого задается тип переменной, например Dim name [As type]. Оператор Public используется только вне модуля, в его общей части и делает описываемую переменную доступной из всех процедур всех модулей проекта. Оператор Private служит для объявления переменной уровня модуля, доступной только процедурам данного модуля. Можно использовать также оператор Dim, но применение Private предпочтительнее как противоположное Public. Переменные могут быть объявлены внутри процедуры операторами Dim или Static. Такие переменные называют также локальными, поскольку доступны только в той процедуре, в которой они объявлены. Данное свойство (область видимости) позволяет использовать одинаковые имена переменных в разных процедурах, не опасаясь конфликтов или случайных изменений значений переменных. Время жизни локальных переменных, объявленных с помощью оператора Dim равно времени работы процедуры и по ее окончании значения таких переменных теряются. Переменные, объявленные с помощью оператора Static сохраняют свои значения в течении всего времени выполнения приложения. При повторном входе в процедуру, где описана такая переменная, ее значение сохраняется. Операторы Public и Private можно применять при описании констант и процедур, что позволяет указать их область видимости. Для процедур возможно также применение оператора Static, что позволяет сделать все переменные в процедуре статическими: Static Function Total (num) as Integer. Это приводит к тому, что все локальные переменные в процедуре становятся статическими, независимо от того, как они определены; операторами Static, Dim, Private или неявным образом. Операторы присваивания Инструкция Let Присваивает значение выражения переменной или свойству: [Let] имяПеременной = выражение Явное использование ключевого слова Let зависит от вкуса пользователя, обычно это слово опускают. Значение выражения может быть присвоено переменной, только если оно имеет совместимый с этой переменной тип данных. Невозможно присвоить строковое выражение числовой переменной или числовое выражение строковой переменной. Такая попытка приведет к ошибке во время компиляции. Переменным типа Variant могут присваиваться как строковые, так и числовые выражения. Однако обратное не всегда верно. Любое значение типа Variant, за исключением значения Null, допускает присвоение строковой переменной, но только значение типа Variant, которое может рассматриваться как число, может быть присвоено числовой переменной. Пользуйтесь функцией IsNumeric для определения возможности преобразования значения Variant в числовое значение. Внимание! Присвоение выражения с одним из числовых типов переменной с другим числовым типом данных преобразует значение выражения в тип данных результирующей переменной. Инструкция Let может быть использована для присвоения одной переменной-записи другой, только если обе переменные имеют одинаковый определяемый пользователем тип. Для присвоения переменных-записей различных определяемых пользователем типов используется инструкция LSet. Для присвоения переменным ссылок на объекты применяется инструкция Set. Управляющие структуры позволяют управлять последовательностью выполнения программы. Без операторов управления все операторы программы будут выполняться слева направо и сверху вниз. Однако иногда требуется многократно выполнять некоторый набор инструкций автоматически, либо решить задачу по-другому в зависимости от значения переменных или параметров, заданных пользователем во время выполнения. Для этого служат конструкции управления и циклы. VBA поддерживает следующие конструкции принятия решений: If... Then If... Then... Else Select Case Конструкция If... Then Конструкция If... Then применяется, когда необходимо выполнить один или группу операторов в зависимости от некоторого условия. Синтаксис этой конструкции позволяет задавать ее в одной строке или в нескольких строках программы: If условие Then выражение If условие Then выражение End If Обычно условие является простым сравнением, но оно может быть любым выражением с вычисляемым значением. Это значение интерпретируется как False (Ложь), если оно нулевое, а любое ненулевое рассматривается как True (Истина). Если условие истинно, то выполняются все выражения, стоящие после ключевого слова Then. Для условного выполнения одного оператора можно использовать как синтаксис для одной строки, так и синтаксис для нескольких строк (блоковую конструкцию). Следующие два оператора эквивалентны: If anyDate < Now Then anyDate = Now If anyDate < Now Then anyDate = Now End If Заметим, что синтаксис оператора If... Then для одной строки не использует оператор End If. Чтобы выполнить последовательность операторов, если условие истинно, следует использовать блоковую конструкцию If... Then... End If. If anyDate < Now Then anyDate = Now Timer.Enabled = False ' Запретить таймер. End If Если условие ложно, то операторы после ключевого слова Then не выполняется, а управление передается на следующую строку (или строку после оператора End If в блочной конструкции). Популярное:
|
Последнее изменение этой страницы: 2017-03-08; Просмотров: 1484; Нарушение авторского права страницы