Vba что такое: макросы VBA / Блог компании Digital Security / Хабр
Урок 1 по VBA — знакомство с Visual Basic for Applications
В это статье мы кратко познакомимся с языком VBA, который позволяет создавать макросы в программных продуктах Microsoft Office. Макросы – некий программный код, который позволяет реализовывать за вас поставленную задачу. В отличии от прикладных программ, макросы VBA как таковые не могут выполняться самостоятельно. Язык VBA – Visual Basic for Applications является родственником таких языков как VBScript, Visual Basic или простой Basic. Синтаксис и общие правила программирования практически идентичны.
По сути, зная язык VBScript сервера Windows Script Host, вы с легкостью освоите все премудрости VBA.
Отличия VBA от VBScript
Графический интерфейс – редактор VBA предоставляет минимальный набор объектов для создания графического интерфейса. Вы можете добавить в проект новую форму и поместить на нее нужные объекты, например, список, кнопку, текстовое поле и так далее. В VBScript для этих целей нужно прибегать к помощи стороннего объекта WindowSystemObject.
Внешние объекты – оба языка позволяют подключать функциональные возможности внешних объектов. Объект – в данном контексте это внешний библиотечный файл с набором методов (функций) и свойств (переменных). Однако, если вы создаете макрос в Word, то объект Word.Application будет доступен автоматически, если макрос работает в документе Excel, то автоматически доступен компонент Excel.Application. В Windows Script Host сценариях эти объекты нужно подключать самостоятельно (сделать ссылку).
Обработка событий – в VBA компоненты формы поддерживают не только методы и свойств, но и события, например, нажатие кнопки мыши. В WSH обработка событий не предусмотрена по определению, так как, там нужно отдельно подключать классы для создания графического интерфейс.
Практическое применение VBA
И так, открыв любой документ Microsoft Office, например, Word, мы может вызвать встроенный редактор Visual Basic (комбинация клавиш Alt + F11) и приступить к созданию макроса. Как упоминалось выше, в макросах можно подключать функциональные возможности внешних объектов, тем самым, получать доступ к элементам операционной системы, например, файловая система, реестр и так далее. Желательно, что бы в настройках был отключен автоматический запуск макроса при открытии документа, дабы дырявый или зловредный код не натворил лиха.
Однако, на сегодняшний момент, макросы и язык VBA как элементы администрирования теряют свое преимущество. Тот же Microsoft Access, который предназначен для работы с базами данных также практически не используется. Более актуальным является пакет 1С.
Общие синтаксические принципы языка VBA
- Регистр не играет роли – вы можете прописать оператор как в верхнем, так и в нижнем регистре, или вообще в вперемешку, например, dim, DIM, Dim, разницы нет.
- Комментарии – для комментирования строки, перед ней прописывается одинарная кавычка или ключевое слово REM.
- Максимальная длина любого имени (будь то имя переменной, константы или процедуры) составляет 255 знаков.
- В отличии от JavaScript, Jscript или С языков, в VBA в конце строки с операторами не нужно ставить запятой.
- Двоеточие – чтобы не прописывать каждый оператор в отдельной строке, их можно с помощью двоеточия прописать в одну строку, например: MsgBox «Строка1» : MsgBox «Строка2»
- Перенос операторов – если строка с операторами слишком длинная, то ее можно разделить на несколько при помощи символа подчеркивания и знака &, например:
MsgBox «Это простая» _
& «строка»
Для демонстрации работы с макросами напишем такой пример. Откройте документ Microsoft Word и запустите редактор Visual Basic. Вам нужно создать новую форму и новый модуль (макрос). Цель – решение квадратного уравнения с изменяемыми значениями.
На поверхность формы надо добавить три полосы прокрутки и две текстовые метки. В редакторе кода для формы пропишите:
Option Explicit Sub Get_Result() Dim MyA As Byte, MyB As Byte, MyC As Byte Dim D, x, x1, x2, msg MyA = ScrollBar1. 2 - 4 * MyA * MyC 'Если дискриминант равен нулую - одно решение If D = 0 Then x = MyB / (2 * MyA) msg = "Уравнение имеет одно решение, x ровно: " & x 'Если дискриминант больше нуля - два решения ElseIf D > 0 Then x1 = (-MyB + Sqr(D)) / (2 * MyA) x2 = (-MyB - Sqr(D)) / (2 * MyA) msg = "Уравнение имеет два решения" & vbCrLf & "x1 ровно: " & x1 & vbCrLf & "x2 ровно: " & x2 'Если дискриминант меньше нуля - нет решения Else msg = "Нет решения (комплексные числа)" End If Label2.Caption = msg End Sub Private Sub ScrollBar1_Change() Call Get_Result End Sub Private Sub ScrollBar2_Change() Call Get_Result End Sub Private Sub ScrollBar3_Change() Call Get_Result End Sub Private Sub UserForm_Initialize() Dim MyA As Byte, MyB As Byte, MyC As Byte ' параметры полос прокрутки ScrollBar1.Min = 1 ScrollBar1.Max = 20 ScrollBar2.Min = 1 ScrollBar2.Max = 30 ScrollBar3.Min = 1 ScrollBar3.Max = 40 ' параметры первого текстового поля Label1. FontSize = 15 Label1.ForeColor = &HFF0000 Label1.TextAlign = fmTextAlignCenter ' параметры второго текстового поля Label2.FontSize = 15 Label2.ForeColor = &H6400 MyA = ScrollBar1.Value: MyB = ScrollBar2.Value: MyC = ScrollBar3.Value Label1.Caption = MyA & "x*x + " _ & MyB & "x + " _ & MyC & " = 0" End Sub |
Код VBA предельно прост, в процедуре Get_Result происходит проверка текущих значений для полос прокрутки, далее эти значения подставляются в формулу для нахождения дискриминанта. Результат решения будет выводиться на поверхности формы во вторую текстовую метку. Аналогичный пример я разбирал для языка VBScript в этой статье.
VBA – материалы для изучения
Привет, сейчас мы рассмотрим ситуацию, когда у Вас возникла необходимость в Excel сохранять файл
Если у Вас встала задача асинхронно выполнять хранимые процедуры в Microsoft SQL Server, при
Всем привет! Материал сегодня будет посвящен рассмотрению возможности Access выгружать Recordset в Excel на
Если Вы хотите в программе, реализованной в Access 2003 наблюдать за ходом выполнения определённой
Если у Вас возникла необходимость выгружать данные из базы MS SQL Server в текстовый
Сегодня мы займёмся интеграцией служб Reporting Services в приложения, и в качестве примера давайте,
Данный материал посвящен созданию простого редактора SQL запросов, с помощью которого можно посылать SQL
Данный урок посвящен SQL запросам к базе данных на VBA Access. Мы рассмотрим, как
Access очень популярен и многие программисты у себя в организации используют его в качестве
Продолжаем осваивать Access 2003, и пришло время поговорить о написании собственных функций на VBA.
Как написать функцию на VBA Access 2003 | Info-Comp.ru
Продолжаем осваивать Access 2003, и пришло время поговорить о написании собственных функций на VBA. Мы рассмотрим немного теории, т.е. где создаются эти функции, для чего их пишут, а также как обычно попрактикуемся в этом, в принципе не сложном, деле.
Тему программирования на VBA Access 2003 мы уже немного затрагивали, например, рассматривали встроенные функции и если говорить вообще об Access 2003, то тут мы тоже преуспели, например, освоили группировку данных в отчете.
А сегодня, приступим к более интересной, как мне кажется, теме это написание своих функций на языке VBA.
Что такое пользовательские функции VBA и зачем их пишут
Это функции, которые пишет сам программист для упрощения остального кода программы.
Что здесь понимается под упрощением, и для чего вообще нужно писать такие функции, я решил объяснить по пунктам, так как это будет более понятно для начинающих, да и просто для восприятия:
- И в первом пункте сразу хотелось бы отметить это значительное сокращение кода. Например, Вам часто нужно выполнять какие-либо действия, код которых занимает, скажем, 10-20 и более строк, и вот представите, что Вы данный код будете повторять 2-3-10… раз в своем основном коде программы, другими словами количество строк основного кода возрастет в разы, а чем это грозит, рассмотрим во втором пункте;
- Если у Вас код очень большой, то его будет трудно в дальнейшем редактировать и к тому же если у Вас есть повторяющейся код, то тогда придется искать его и исправлять код во всех местах, что согласитесь первое, это очень нудно, а второе Вы можете просто забыть изменить код в каком-нибудь месте и программа не будет работать или что еще хуже, будет работать, но не правильно, за что Вас конечно начальство не похвалит;
- Про сокращение кода мы сказали, но также мы делаем его более наглядным и понятным. Другими словами, когда в коде мы встретим вызов той или иной функции, мы сразу поймем, что она делает, и будем меньше тратить время на разбор и понимание всего кода, а это принесет нам выгоду, так как мы будем более оперативно вносить изменения в функционал нашей программы, а вот за это начальство может нас похвалить.
Как и у любого языка программирования и среды программирования в VBA Access есть область видимости функции, например, мы, можем написать функцию которую можно будет вызвать только в пределах одного объекта (формы или отчета) или мы можем ее написать в области видимости всего проекта, т.е. функцию можно будет вызвать из любой формы или отчета. Мы сегодня рассмотрим оба варианта, соответственно на примерах.
Примеры написания функций VBA Access
И для начала давайте определимся, что за функцию мы будем писать, т.е. что она будет делать. Я предлагаю написать в качестве простого примера функцию, которая будет принимать один параметр с типом date и возвращать строку вида «19 Июня 2014г. ». Как мне кажется достаточно простой пример, но вдруг кому-нибудь пригодится.
Пишем локальную функцию VBA
Как я уже сказал ранее, есть разные области видимости функций и сейчас мы напишем своего рода локальную функцию, которую можно будет запустить только из кода того объекта, где эта функция написана.
Для реализации нашего примера давайте создадим форму, добавим на нее кнопку, клик по которой будет вызывать нашу функцию. Думаю показывать, как создать форму не стоит, так как мы это уже неоднократно делали, единственное скажу, что я форму назвал «Тестовая форма», элемент кнопка назвал «start» с подписью «Старт»
Теперь запустим редактор кода VBA, это можно сделать путем нажатия кнопки на панели инструментом «Программа»
И вставляем код нашей функции и сразу же код ее вызова, т.е. код обработки события нажатия кнопки (весь код прокомментирован):
Private Function getStrDate(dt As Date) As String 'Объявляем вспомогательные переменные Dim d As String Dim m As String Dim y As String 'Получаем день d = Day(dt) 'Получаем месяц m = Month(dt) 'Определяем, какой именно месяц Select Case m Case 1: m = "Января" Case 2: m = "Февраля" Case 3: m = "Марта" Case 4: m = "Апреля" Case 5: m = "Мая" Case 6: m = "Июня" Case 7: m = "Июля" Case 8: m = "Августа" Case 9: m = "Сентября" Case 10: m = "Октября" Case 11: m = "Ноября" Case 12: m = "Декабря" End Select 'Получаем год y = Year(dt) 'Соединяем и возвращаем результат getStrDate = d & " " & m & " " & y & "г. " End Function Private Sub start_Click() 'Выводим сообщение с текстом, который вернет нам наша функция MsgBox getStrDate("19.06.2014") End Sub
В итоге у Вас должно получится следующее:
То, что это функция локальная свидетельствует слово Private перед названием функции.
Теперь все сохраняем, открываем нашу форму, жмем, старт и получаем наше сообщение:
Как видите, мы получили тот результат, который хотели, т.е. мы передавали в качестве параметра дату «19.06.2014» и получили соответствующий результат.
Пишем глобальную функцию VBA
Для того чтобы написать такую функцию создадим модуль, например «test_func» а там уже напишем нашу функцию. Для того чтобы создать модуль, открываем Access и на панели объектов выбираем «Модули» и жмем «Создать».
Затем вставляем наш код, с одним изменением, перед названием функции пишем Public, и у Вас должно получится вот такая картина:
Теперь осталось изменить код вызова нашей новой глобальной функции, для этого меняем код обработки события нажатия кнопки на нашей тестовой форме, на вот такой:
MsgBox test_func. getStrDate("19.06.2014")
Сохраняем и проверяем, результат будет таким же, но его нам вернула уже совсем другая функция.
Как видите, все нет так уж и сложно, функция конечно простая, но Вы можете писать функции для собственных нужд, которые будут более сложными. Я всем советую весь повторяющийся код выносить в функции, так как это будет намного лучше, как для работы с этим кодом, так и просто для восприятия. Надеюсь, сегодняшняя статья помогла Вам разобраться с вопросом «Как написать функции на VBA Access?». Удачи в программировании на VBA.
Нравится2Не нравится
Структура редактора VBA (Visual Basic for Applications)
Редактор VBA активизируется командой Alt + F11 или Сервис, Макрос, Редактор Visual Basic (Tools, Macro, Visual Basic Editor) или нажатием кнопки Редактор Visual Basic (Visual Basic Editor) панели инструментов Visual Basic.
Возвратиться из редактора VBA в рабочую книгу можно нажатием кнопки Вид Microsoft Excel (View Microsoft Excel) Интерфейс VBA состоит из следующих основных компонентов: окно проекта, окно свойств, окно редактирования кода, окна форм, меню и панели инструментов.
Окно проекта
Окно проекта в редакторе VBA активизируется выбором команды Вид, Окно проекта (View, Project window) или нажатием кнопки Окно проекта (Project window) В окне проекта (VBAProject) представлена иерархическая структура файлов форм и модулей текущего проекта (рис. 1.2).
В проекте автоматически создается модуль для каждого рабочего листа и для всей книги. Кроме того, модули создаются для каждой пользовательской формы, макросов и классов. По своему предназначению модули делятся на два типа: модули объектов и стандартные. К стандартным модулям относятся те, которые содержат макросы. Такие модули добавляются в проект командой Вставка, Модуль (Insert, Module). К модулям объектов относятся модули, связанные с рабочей книгой, рабочими листами, формами, и модули класса.
Формы создаются командой Вставка, UserForm (Insert, UserForm), а модули класса — командой Вставка, Модуль класса (Insert, Module). По мере создания, добавления и удаления файлов из проекта эти изменения отображаются в окне проекта. Отметим, что удаление файла из окна проекта производится выбором значка файла с последующим выполнением команды Файл, Удалить (File, Delete).
В окне проекта выводится проект всех открытых рабочих книг. Это позволяет легко копировать формы и коды из одного проекта в другой, что убыстряет процесс создания новых приложений.
Рис. 1.2. Окно проекта
Окно для редактирования кода
Перемещение указателя на значок файла в окне проекта и выполнение двойного щелчка кнопкой мыши открывает окно редактора кода (рис. 1.3) для соответствующего модуля.
Рис. 1.3. Окно редактирования кода
Окно редактирования кода служит в качестве редактора для ввода и изменения кода процедур приложения. Код внутри модуля организован в виде отдельных разделов для каждого объекта, программируемого в модуле. В окне редактирования доступны два режима представления кода: просмотр отдельной процедуры и всего модуля. Переключение режимов работы окна редактирования кода осуществляется выбором одной из двух кнопок в нижнем левом углу окна редактирования кода (табл. 1.1), либо установкой или снятием флажкаПросмотр всего модуля (Default to Full Module View) вкладки Редактор (Editor) диалогового окна Параметры (Options), отображаемого на экране командой Сервис, Параметры(Tools, Options) (рис. 1.4).
Таблица 1.1. Режимы работы редактора кода
Кнопка | Режим работы |
Отдельная процедура | |
Все процедуры модуля |
Рис. 1.4. Диалоговое окно Параметры
Два раскрывающихся списка в верхней части окна редактора кода облегчают ориентацию в процедурах. Левый раскрывающийся список позволяет выбрать управляющий элемент или форму, а правый — содержит список событий, допустимых для выбранного в левом списке объекта. Отметим, что при выборе элемента управления в форме посредством двойного щелчка или перемещении указателя на элемент управления и нажатии кнопки Программа (Veiw Code) открывается окно редактирования кода как раз в том месте, где располагается процедура, связанная с этим элементом управления. Обратный переход от процедуры к объекту управления быстрее всего осуществить нажатием кнопки Объект(Veiw Object).
Интеллектуальные возможности редактора кода
Написание программ существенно облегчается за счет способности редактора кода автоматически завершать написание операторов, свойств и параметров. При написании кода редактор сам предлагает пользователю список компонентов, логически завершающих вводимую пользователем инструкцию. Например, набирая код
Range(«A1»).
после ввода точки на экране отобразится список компонентов (рис. 1.5), которые логически завершают данную инструкцию. Двойной щелчок на выбранном элементе из этого списка или нажатие клавиши <Таb> вставляет выбранное имя в код программы. При этом использование клавиши <Таb> вместо мышки иногда предпочтительней, т. к. эта клавиша находится прямо под рукой и нажатие на нее производится только одним движением пальца левой руки, что не требует особого времени и усилий.
Рис. 1.5. Список компонентов
Автоматическое отображение списка компонентов происходит только при установленном флажке Список компонентов (Auto List Members) вкладки Редактор (Editor) диалогового окна Параметры (Options), отображаемого на экране после выбора команды Сервис, Параметры (Tools, Options).
Список компонентов можно выводить на экран нажатием комбинации клавиш <Ctrl>+<J>, при этом список отображается как при установленном, так и при снятом флажке Список компонентов (Auto List Members) вкладки Редактор (Editor) диалогового окна Параметры (Options).
Отображение списка компонентов, логически завершающих вводимую инструкцию,, является одним из интеллектуальных качеств редактора кода. Этим качеством интеллектуальные ресурсы редактора кода не исчерпываются. Другим его такого рода качеством является автоматическое отображение на экране сведений о процедурах, функциях, свойствах и методах после набора их имени (рис. 1.6).
Рис. 1.6. Отображаемые сведения о вводимой процедуре
Автоматическое отображение на экране сведений о процедурах, функциях, свойствах и методах после ввода их имени происходит только при установленном флажке Краткие сведения (Auto Quick Info) вкладки Редактор (Editor) диалогового окна Параметры (Options), отображаемого на экране после выбора команды Сервис, Параметры (Tools, Options) (см. рис. 1.4).
Описанную выше всплывающую подсказку можно также выводить на экран нажатием комбинации клавиш <Ctrl>+<!>. При этом всплывающая подсказка отображается как при установленном, так и при снятом флажке Краткие сведения вкладки Редактор диалогового окна Параметры (Options).
Редактор кода также производит автоматическую проверку синтаксиса набранной строки кода сразу после нажатия клавиши <Enter>. Если после набора строки и нажатия клавиши <Enter> строка выделяется красным цветом, то это как раз и указывает на наличие синтаксической ошибки в набранной строке. Эту ошибку необходимо найти и исправить. Кроме того, если установлен флажок Проверка_синтаксиса (Auto Syntax Check) вкладки Редактор (Editor) диалогового окна Параметры (Options), отображаемого на экране посредством выбора команды Сервис, Параметры (Tools, Options) (см. рис. 1.4), помимо выделения красным цветом фрагмента кода с синтаксической ошибкой, на экране отображается диалоговое окно, поясняющее, какая возможная ошибка произошла.
Редактор кода обладает еще одной мощной интеллектуальной возможностью, увеличивающей эффективность работы пользователя. Если курсор расположить на ключевом слове языка VBA, имени процедуры, функции, свойства или метода и нажать клавишу <F1>, то на экране появится окно со справочной информацией об этой функции. Обычно в справке имеется пример использования кода, что позволяет быстрее разобраться в ситуации, которая при написании программы озадачила вас.
Работа от примера является одним из краеугольных принципов миропозна-ния и творчества. Стиль работы от примера очень ярко отображен в принципе чайника. Несмотря на всю его шутливость и кажущуюся абсурдность, в нем сформулирован многовековой опыт работы, который очень часто приводит к быстрым и эффективным результатам. Попытаемся описать принцип чайника следующим образом. У программиста спросили, как надо вскипятить воду, если на кухне есть спички, газовая плита, водопроводный кран и пустой чайник, стоящий на кухонном столе. «Тривиально! — ответил программист. — Налейте в чайник воду, зажгите горелку газовой плиты и поставьте на нее чайник.» Тогда программисту задают следующий вопрос: «На кухонном столе стрит чайник с водой, горелка газовой плиты зажжена. Как вскипятить чайник?» «Элементарно! — отвечает программист. — Надо просто вылить воду из чайника, погасить горелку и мы оказываемся в условиях задачи, которая только что была успешно решена!»
Окно редактирования форм (UserForm)
Для создания диалоговых окон, разрабатываемых приложений в VBA, используются формы. Редактор форм является одним из основных инструментов визуального программирования. Форма в проект добавляется с помощью команды Вставка, Форма (Insert, Form) или нажатием кнопки Вставить UserForm (Insert UserForm). В результате на экран выводится незаполненная форма с панелью инструментов Панель элементов (Toolbox) (рис. 1.7).
Рис. 1.7. Окно редактирования форм и панель инструментов Панель элементов
Используя панель инструментов Панель элементов из незаполненной формы, можно сконструировать любое требуемое для приложения диалоговое окно. Размещение нового управляющего элемента в форме осуществляется следующей последовательностью действий:
- Щелкните значок того элемента, который вы собираетесь разместить в форме.
- Поместите указатель мыши на то место, где будет располагаться управляющий элемент.
- Нажмите левую кнопку мыши и, не отпуская ее, растяните появившийся прямоугольник до требуемых размеров.
- Отпустите кнопку мыши. Элемент управления на нужном место создан.
Размеры формы и расположенных на ней элементов управления можно изменять. Технология изменения размеров стандартная для Windows: выделить изменяемый элемент, разместить указатель мыши на одном из размерных маркеров и протащить его при нажатой левой кнопки мыши так, чтобы объект принял требуемые размеры. Окно редактирования форм поддерживает операции буфера обмена.
Рис. 1.8. Команды меню Формат
Таким образом, можно копировать, вырезать и вставлять элементы управления, расположенные на поверхности формы. Для облегчения размещения и выравнивания элементов управления используется сетка. Активизировать ее можно с помощью вкладки Общие (General) диалогового окна Параметры (Options), вызываемого командой Сервис, Параметры(Tools, Options), там же устанавливается шаг сетки. Кроме того, команды меню Формат (Format) автоматизируют и облегчают процесс выравнивания элементов управления как по их взаимному местоположению, так и по размерам (рис. 1.8).
Окно свойств
В окне свойств перечисляются основные установки свойств выбранной формы или элемента управления. Используя это окно, можно просматривать свойства и изменять их установки. Для просмотра свойств выбранного объекта надо либо щелкнуть кнопку Окно свойств (Properties Window) либо выбрать команду Вид, Окно свойств (View, Properties Window) (рис. 1.9).
Рис. 1.9. Окно свойств
Окно свойств состоит из двух составных частей: верхней и рабочей. В верхней части окна свойств располагается раскрывающийся список, из которого можно выбрать любой элемент управления текущей формы или саму форму. Рабочая часть состоит из двух вкладок: По алфавиту (Alphabetic) и По категориям (Categorized), отображающие набор свойств в алфавитном порядке или по категориям. В обоих вкладках свойство Name (имя элемента управления) будет первым. Изменяются значения свойств одним из следующих способов:
- Вводом с клавиатуры значения свойства в соответствующее поле.
- Значения большинства свойств можно выбрать из раскрывающегося списка. Раскрывающийся список активизируется щелчком в соответствующем поле окна свойств.
Окно Просмотр объектов (Object Browser)
Окно Просмотр объектов (Object Browser) вызывается командой Вид, Просмотр объектов (View, Object Browser) или нажатием кнопки Просмотр объектов (Object Browser) (рис. 1.10). В этом окне приведен список всех объектов, которые имеются в системе и которые можно использовать при создании проекта.
Рис. 1.10. Окно Просмотр объектов
Окно Просмотр объектов (Object Browser) состоит из трех основных частей:
- Раскрывающегося списка Проект/Библиотека (Project/Library) в левом верхнем углу окна. В этом раскрывающемся списке можно выбрать различные проекты и библиотеки объектов. В частности, библиотеки объектов Excel, VBA, Office и VBAProject (объекты пользовательского проекта). Выбор в списке строки <Все библиотеки> (<Аll Libraries>) отображает список объектов всех библиотек.
- Списка Классы (Classes). После выбора из раскрывающегося списка Проект/Библиотека (Project/Library) просматриваемой библиотеки, например VBA, все классы объектов выбранной библиотеки выводятся в списке Классы (Classes).
- Списка Компоненты (Members). После выбора класса из списка Классы (Classes) просматриваемой библиотеки, например FileSystem, все компоненты выбранного класса выводятся в списке Компоненты (Members). При выделении строки в этом списке в нижней части окна Просмотр объектов (Object Browser) приводится дополнительная информация о выбранном компоненте. Кроме того, если нажать на кнопку Справка (Help), расположенную на панели инструментов в правой верхней части окна Просмотр объектов (Object Browser), то на экране отобразится окно Справочник Visual_Basic (Microsoft Visual Basic Help) с подробной информацией о выделенном компоненте.
Если вы устали изучать редактор VBA, то советую вам изучить лучшие программы для андроид на сайте http://www.fly-phone.ru/notes/android/luchshie-programmy-dlya-android/
Еще записи по теме
Что такое VBA? | KV. by
Нельзя было шефа учить скрипты писать. Вчера говорит: «Нужно скриптик написать на VBA, который ищет во всех *.doc-файлах заданной папки строку «gcc» и выводит соответствующий список файлов; я уже накопал функции открытия файлов, чтения папки, сам напишешь или я на выходных сделаю?» Не мог F3 в Проводнике нажать… По |
Сегодня эта аббревиатура из трёх
латинских букв уже не так
повсеместно распространена, как,
скажем, несколько лет назад, когда в
Сети и в офлайновых книжных
магазинах предлагались издания,
посвященные VBA, а курсы по нему
входили во многие учебники по
информатике. Сегодня, конечно,
ситуация несколько поменялась, но,
в целом, VBA совсем не забыт.
Расшифровывается данная
аббревиатура как Visual Basic for Applications,
на русский язык это обычно
переводят как «Visual Basic для
приложений». Так называют язык
программирования, встроенный во
многие известные пакеты программ
для написания пользователем
простых сценариев (макросов) для
автоматизации своих действий.
Самым известным из таких пакетов,
конечно же, можно считать Microsoft Office,
но используется VBA и в других
программных продуктах, таких, как
AutoCAD, SolidWorks, CorelDRAW, WordPerfect и ESRI ArcGIS.
Как несложно догадаться по
названию данного языка, его основой
является «большой» Visual Basic,
хотя, по сравнению с оригинальным
языком, синтаксис VBA несколько
упрощен. Сделано это, конечно же, не
случайно — дело в том, что макросы
должны быть доступны и тем людям,
которые достаточно смутно, вообще
говоря, представляют себе, что
такое программирование, в принципе.
Для этого же в приложениях, где VBA
доступен пользователям в качестве
средства автоматизации их
действий, как правило, есть и
специальные «мастера»,
позволяющие конструировать
сценарии в визуальном режиме —
например, записывать за
пользователем последовательность
выполняемых действий и затем
«перекладывать» её на язык
команд, доступных ему при
использовании VBA.
Несмотря на то, что VBA является
интерпретируемым языком, и
программы, написанные на нём, могут
быть выполнены только внутри
приложения, содержащего в себе
интерпретатор VBA-сценариев, этот
язык предоставляет достаточно
серьёзные средства для
манипулирования COM-объектами,
файлами и системой в целом. В связи
с этим понятен интерес к нему
вирусописателей. До сих пор
наблюдаются массовые рассылки
документов в форматах Microsoft Office (в
основном, конечно же, Microsoft Word),
содержащих в себе вредоносный код
на VBA. В связи с этим в свежих
версиях «Офиса» корпорация
Microsoft достаточно серьезно
потрудилась над безопасностью
работы пользователя с макросами —
они по умолчанию отключены, и от
пользователя требуется
подтверждать буквально каждый шаг
макроса, который может
потенциально стать источником
каких-либо проблем или
неприятностей.
В новой версии Microsoft Office для Mac OS
поддержка VBA была прекращена, хотя
его возвращения ожидают в
готовящейся к выпуску версии Office
2011. Тем не менее, взгляды экспертов
на будущее Visual Basic for Applications весьма
неоднозначны и варьируются от
крайнего пессимизма до
безудержного оптимизма.
Пользователю же просто полезно
знать VBA хотя бы на начальном
уровне, чтобы быть способным
справиться с возникающими задачами
и иметь возможность хотя бы базовой
автоматизации своих действий.
Вадим СТАНКЕВИЧ,
[email protected]
Что такое переменная и как правильно её объявить?
Хитрости »
1 Май 2011 Дмитрий 166302 просмотров
Переменная — это некий контейнер, в котором VBA хранит данные. Если подробнее, то это как коробочка, в которую Вы можете положить что-то на хранение, а затем по мере необходимости достать. Только в данном случае в переменной мы храним число, строку или иные данные, которые затем можем извлекать из неё и использовать в коде по мере необходимости.
Для чего нужна переменная? Чтобы хранить значение и применить его позже в любой момент. Например, в ячейке А1 записана сумма, а нажатием на кнопку запускается обновление отчета. После обновления отчета сумма в А1 изменится. Необходимо сверить сумму до обновления с суммой после и в зависимости от этого сделать какое-либо действие. Переменная как раз позволит запомнить значение ячейки до того, как она обновится и использовать именно это значение после обновления.
Требования к переменным:
В качестве имен переменных можно использовать символы букв и числа, но первой в имени переменной всегда должна быть буква. Не допускается использование точки, запятой, пробела и иных знаков препинания, кроме нижнего подчеркивания. Длина имени не должна превышать 254 символов. Так же нельзя использовать в качестве имен для переменных зарезервированные константы редактора VBA(например Sub, Msgbox, ubound, Date и т.п.). Так же для переменных неважен регистр букв.
Теперь рассмотрим основные декларированные в VBA типы данных, которые можно хранить в переменных:
Тип данных | Занимает байт в памяти | Пределы значений |
---|---|---|
Byte | 1 | Целые числа от 0 до 255 |
Boolean | 2 | True или False |
Integer | 2 | Целые числа от (-32768) до 32767 |
Long | 4 | Целые числа от (-2147483648) до 2147483647 |
Single | 4 | От (–3. 402823Е+38) до (–1.401298Е-45) и от 1.401298Е-45 до 3.402823Е+38 |
Double | 8 | От ±1.79769313486232Е+308 до ±4.94065645841247Е-324 |
Decimal | 12 | От ±79228162514264337593543950335 без десятичных знаков до ±7,9228162514264337593543950335 с 28-ю знаками после запятой |
Currency | 8 | От (–922337203685477.5808) до 922337203685477.5807 |
Date | 8 | От 01.01.100 до 31.12.9999(не надо путать с датами в Excel — 01.01.1900 до 31.12.9999) |
String | 10(+длина строки) | От 0 до 65400 символов для фиксированных строк и чуть более 2 млрд. для строк переменной длины |
Object | 4 | Любой объект |
Array | Определяется кол-вом и размером элементов | — |
Variant | от 16-ти | Любой из встроенных типов данных |
Как видно из таблицы больше всего памяти занимает Variant. Притом это если он хранит числовые данные. Если же такая переменная будет хранить данные строкового типа(текст), то размер занимаемой памяти будет измеряться уже начиная с 22 байт + длина строки, хранящейся в переменной. Чем больше памяти занимает переменная, тем дольше она инициализируется в памяти и тем медленнее код будет выполняться. Вот поэтому и важно явно задавать тип данных, хранимых в переменной — это называется объявить переменную.
Тип данных Decimal больше не используется, поэтому объявить переменную данного типа в VBA не получится — подобная попытка приведет к синтаксической ошибке. Для работы с данными типа Decimal переменную необходимо изначально объявить как Variant или вообще без типа (например Dim a), т.к. тип данных Variant используется в VBA по умолчанию и принимает любой тип данных.
Так же переменным можно назначать и другие типы данных, которых нет в таблице выше — это типы, которые поддерживаются объектной моделью приложений, к которым «подключен» VBA. Например, если зайти в VBA из Excel, то библиотека типов объектной модели Excel подключена по умолчанию и для переменных становится доступно множество типов этой объектной модели. Многие из них знакомы всем: Workbook, Worksheet, Range, Cells, Chart и т.д. Т.е. это книги, листы, ячейки, диаграммы. Типов много, почти на каждый объект и коллекцию. Рассматривать здесь все бессмысленно. Могу лишь привести пару строк кода:
Dim rRange as Range 'назначили переменной тип ячейка/диапазон Set rRange = Range("A1") 'присвоили ссылку на ячейку A1 текущего листа |
Dim rRange as Range ‘назначили переменной тип ячейка/диапазон
Set rRange = Range(«A1») ‘присвоили ссылку на ячейку A1 текущего листа
Про объявление переменных подробно написано чуть ниже.
А более подробно про обращение к диапазонам из VBA можно почитать в этой статье: Как обратиться к диапазону из VBA
как объявлять переменные
На самом деле все очень просто. Это делается при помощи операторов области действия: Dim, Public,Static и оператора присвоения типа As. Самый распространенный оператор — Dim. Его и возьмем в качестве примера. Синтаксис объявления:
[оператор области действия] Имя_переменной As [тип данных] |
[оператор области действия] Имя_переменной As [тип данных]
Очень частая ошибка при объявлении переменных, совершаемая начинающими изучать VBA:
Dim MyVar1, MyVar2, MyVar3 As Integer |
Dim MyVar1, MyVar2, MyVar3 As Integer
Вроде бы исходя из логики всем переменным присвоен тип данных Integer. Но это ошибочное суждение. Тип Integer присвоен только последней переменной, к которой он «привязан» оператором As — MyVar3. Все остальные переменные имеют тип данных Variant. Т.е. если Вы не задаете каждой переменной свой тип хранимых данных явно(т.е. не указываете для неё тип данных через As), то VBA сам присваивает для такой переменной тип данных Variant, т. к. он может хранить любой тип данных. А вот так выглядит правильное присвоение типа данных:
Dim MyVar1 As Integer, MyVar2 As Integer, MyVar3 As Integer |
Dim MyVar1 As Integer, MyVar2 As Integer, MyVar3 As Integer
Это и есть объявление переменных. Т.е. сначала идет оператор области действия (Dim, Public,Static), сразу за ним имя переменной, затем оператор As и тип.
Но это не все. Некоторые типы переменным можно присваивать еще короче — даже без оператора As:
Dim MyVar1%, MyVar2%, MyVar3% |
Dim MyVar1%, MyVar2%, MyVar3%
Всего шесть типов, которые можно объявить подобным методом:
! — Single
# — Double
$ — String
% — Integer
& — Long
@ — Currency
На что стоит обратить внимание, при объявлении переменных подобным образом: между именем переменной и знаком типа не должно быть пробелов.
Я лично в большинстве статей предпочитаю использовать первый метод, т. е. полное указание типа. Это читабельнее и понятнее. В каких-то проектах могу использовать краткое указание, в общих(разработка в команде) — полное. В своих кодах Вы вправе использовать удобный Вам метод — ошибки не будет.
Теперь разберемся с операторами области действия(Dim, Public и Static):
- Dim — данный оператор используется для объявления переменной, значение которой будет храниться только в той процедуре, внутри которой данная переменная объявлена. Во время запуска процедуры такая переменная инициализируется в памяти, Вы можете использовать её значение внутри только этой процедуры и по завершению процедуры переменная выгружается из памяти(обнуляется) и данные по ней теряются. Переменную, объявленную подобным образом еще называют локальной переменной. Однако с помощью данного оператора можно объявить переменную, которая будет доступна в любой процедуре модуля. Необходимо объявить переменную вне процедуры — в области объявлений(читать как первой строкой в модуле, после строк объявлений типа — Option Explicit). Тогда значение переменной будет доступно в любой процедуре лишь того модуля, в котором данная переменная была объявлена. Такие переменные называются переменными уровня модуля.
- Static — данный оператор используется для объявления переменной, значение которой предполагается использовать внутри процедуры, но не теряя значения данной переменной по завершении процедуры. Переменные данного типа обычно используют в качестве накопительных счетчиков. Такая переменная инициализируется в памяти при первом запуске процедуры, в которой она объявлена. По завершении процедуры данные по переменной не выгружаются из памяти, но однако они не доступны в других процедурах. Как только Вы запустите процедуру с этой переменной еще раз — данные по такой переменной будут доступны в том виде, в котором были до завершения процедуры. Выгружается из памяти такая переменная только после закрытия проекта(книги с кодом). В простонародье такие переменные чаще называют глобальными(возможно из-за того, что раньше подобные переменные объявлялись при помощи оператора Global, который в настоящее время устарел и не используется)
- Public — данный оператор используется для объявления переменной, значение которой будет доступно в любой процедуре проекта(в обычных модулях, модулях класса, модулях форм, модулях листов и книг). Переменная, объявленная подобным образом, должна быть объявлена вне процедуры — в области объявлений. Такая переменная загружается в память во время загрузки проекта(при открытии книги) и хранит значение до выгрузки проекта(закрытия книги). Использовать её можно в любом модуле и любой процедуре проекта. Важно: объявлять подобным образом переменную необходимо строго в стандартном модуле. Такие переменные называются переменными уровня проекта.
Для большего понимания того, где и как объявлять переменные уровня проекта два небольших примера.
Неправильное объявлениеOption Explicit Sub main() Public MyVariable As String MyVariable = "Глобальная переменная" 'показываем текущее значение переменной MsgBox MyVariable 'пробуем изменить значение переменной Call sub_main 'показываем измененное значение переменной MsgBox MyVariable End Sub 'доп.процедура изменения значения переменной Sub ChangeMyVariable() MyVariable = "Изменили её значение" End Sub
Option Explicit
Sub main()
Public MyVariable As String
MyVariable = «Глобальная переменная»
‘показываем текущее значение переменной
MsgBox MyVariable
‘пробуем изменить значение переменной
Call sub_main
‘показываем измененное значение переменной
MsgBox MyVariable
End Sub
‘доп. процедура изменения значения переменной
Sub ChangeMyVariable()
MyVariable = «Изменили её значение»
End Subпеременные не будут видны во всех модулях всех процедур и функций проекта, потому что:
1. Оператор Public недопустим внутри процедуры(между Sub и End Sub), поэтому VBA при попытке выполнения такой процедуры обязательно выдаст ошибку — Invalid Attribut in Sub or Function.
2. Даже если Public заменить на Dim — это уже будет переменная уровня процедуры и для других процедур будет недоступна.
3. Т.к. объявление неверное — вторая процедура(ChangeMyVariable) ничего не знает о переменной MyVariable и естественно, не сможет изменить именно её.
Правильное объявление'выше глобальных переменных и констант могут быть только декларации: Option Explicit 'принудительное объявление переменных Option Base 1 'нижняя граница объявляемых массивов начинается с 1 Option Compare Text 'сравнение текста без учета регистра 'глобальная переменная - первой строкой, выше всех процедур Public MyVariable As String 'далее процедуры и функции Sub main() MyVariable = "Глобальная переменная" 'показываем текущее значение переменной MsgBox MyVariable, vbInformation, "www. excel-vba.ru" 'пробуем изменить значение переменной Call ChangeMyVariable 'показываем измененное значение переменной MsgBox MyVariable, vbInformation, "www.excel-vba.ru" End Sub 'доп.процедура изменения значения переменной Sub ChangeMyVariable() MyVariable =
Excel VBA Дата и время
Год, месяц, день даты | DateAdd | Текущая дата и время | Час, Минута, Секунда | TimeValue
Узнайте, как работать с датами и временем в Excel VBA .
Поместите командную кнопку на лист и добавьте строки кода ниже. Чтобы выполнить строки кода, нажмите кнопку команды на листе.
Год, Месяц, День числа
Следующий макрос получает год даты. Чтобы объявить дату, используйте оператор Dim.Чтобы инициализировать дату, используйте функцию DateValue.
Код:
Пример тусклого изображения Дата как Дата
exampleDate = DateValue («19 января 2020 г.»)
MsgBox Год (exampleDate)
Результат:
Примечание. Используйте Месяц и День, чтобы получить месяц и день даты.
DateAdd
Чтобы добавить количество дней к дате, используйте функцию DateAdd. Функция DateAdd имеет три аргумента. Введите «d» в качестве первого аргумента, чтобы добавить дни.Введите 3 для второго аргумента, чтобы добавить 3 дня. Третий аргумент представляет дату, к которой будет добавлено количество дней.
Код:
Заменить firstDate как дату, secondDate как дату
firstDate = DateValue («19 января 2020 г.»)
secondDate = DateAdd («d», 3, firstDate)
MsgBox secondDate
Результат:
Примечание. Измените «d» на «m», чтобы добавить количество месяцев к дате. Поместите курсор на DateAdd в редакторе Visual Basic и нажмите F1, чтобы получить справку по другим спецификаторам интервала.Даты указаны в американском формате. Первые месяцы, вторые дни. Этот тип формата зависит от региональных настроек Windows.
Текущая дата и время
Чтобы получить текущую дату и время, используйте функцию «Сейчас».
Код:
MsgBox Сейчас
Результат:
час, минута, секунда
Чтобы получить час времени, используйте функцию Hour.
Код:
MsgBox Hour (сейчас)
Результат:
Примечание. Используйте минуты и секунды, чтобы получить минуты и секунды времени.
TimeValue
Функция TimeValue преобразует строку в временной порядковый номер. Серийный номер времени — это число от 0 до 1. Например, полдень (середина дня) представлен как 0,5.
Код:
MsgBox TimeValue («9:20:01 утра»)
Результат:
Теперь, чтобы ясно видеть, что Excel внутренне обрабатывает время как числа от 0 до 1, добавьте следующие строки кода:
Размер как двойной
y = TimeValue («09:20:01»)
MsgBox y
Результат:
Введение в VBA MGMI Август Что такое VBA? VBA = Visual Basic для приложений Мощный встроенный язык программирования Excel Управляемый событиями.
Презентация на тему: «Введение в VBA MGMI 311 19 августа 2011 года. Что такое VBA? VBA = Visual Basic для приложений. Мощный встроенный язык программирования Excel, управляемый событиями» — стенограмма презентации:
1
Введение в VBA MGMI 311 19 августа 2011 г.
2
Что такое VBA? VBA = Visual Basic для приложений Мощный встроенный язык программирования Excel. Язык, управляемый событиями. Язык, основанный на объектах. Основной макроязык для всех офисных продуктов Microsoft.
3
Язык, управляемый событиями. Ничего не происходит, если что-то не происходит. Код не выполняется, кроме как в ответ на какое-то событие (или по команде кода, когда он запускается каким-либо событием)
4
Объектно-ориентированный язык При обращении к компонентам приложения такие вещи, как книги, рабочие листы, ячейки, диаграммы и т. Д.являются «объектами». У объекта есть определенные атрибуты. Объекты могут делать что-то или что-то с ними делать — эти действия известны как «методы».
5
Макрос Серия команд и функций, которые хранятся в модуле Microsoft Visual Basic, и их можно запускать всякий раз, когда вам нужно выполнить задачу Записать макрос Запустить макрос Редактировать макрос Остановить макрос
6
Записать макрос Панель инструментов разработчика Записать новый макрос для ввода Имя макроса Если вы хотите запустить макрос, нажав сочетание клавиш, введите букву в поле «Сочетание клавиш» Щелкните место, где вы хотите сохранить макрос После завершения задачи в Excel , нажмите Остановить макрос (на панели инструментов)
7
Запуск макроса. Использование сочетания клавиш. На панели инструментов разработчика щелкните макрос. Выберите макрос, который необходимо выполнить. Нажмите «Выполнить» — ИЛИ — Запустите макрос с помощью кнопки панели инструментов.
8
Остановка макроса Если вы хотите остановить выполнение макроса, который в данный момент выполняется, нажмите ESC и щелкните Конец в диалоговом окне Microsoft Visual Basic. Если вы хотите предотвратить автоматический запуск макроса при запуске Microsoft Excel, удерживайте нажатой клавишу Shift во время запуска.
9
Сохранить Excel — с помощью макроса Сохранить как «Excel Macro-Enable Workbook» На панели инструментов разработчика щелкните «Macro Security» в окне Центра управления безопасностью, нажмите «Disable all macros with notification» При вызове книги Excel с поддержкой макросов нажмите «Option» Select » Включить это содержимое »в окне параметров безопасности Microsoft Office.
10
Отредактируйте макрос на панели инструментов разработчика, выберите «Макрос». Щелкните имя макроса, и откроется редактор Visual Basic Editor (VBE). Отредактируйте макрос из исходного кода в VBE.
VBA Compiler — программа защиты VBA.VBA в DLL. Ускорьте VBA.
VBA Compiler for Excel — это программа защиты VBA, которая преобразует код VBA рабочих книг Microsoft Excel и надстроек Excel в двоичный код собственного файла DLL Windows.
После компиляции ваш код VBA не может быть скопирован или восстановлен и имеет высший уровень защиты от пиратства .
Компилятор VBA — лучшая альтернатива подходам к защите кода VBA , таким как обфускация кода VBA или стандартная защита паролем проекта MS Excel VBA.
Скомпилированная книга или файл надстройки Excel остается с исходным расширением файла и ведет себя так же, как исходный файл.
Скачать бесплатную пробную версию
Основные преимущества использования компилятора VBA
- Самая надежная и непроницаемая защита кода VBA. Невозможно восстановить код VBA из Windows DLL.
- VBA ускорить .Производительность некоторых алгоритмов VBA значительно увеличивается после компиляции .
- Невозможно найти, отследить или скопировать код VBA после компиляции, потому что он был скомпилирован и перемещен в Windows DLL.
- Чтобы использовать VBA Compiler , вам не нужно знать какие-либо другие языки программирования , кроме VBA — Visual Basic для приложений.
- Исходная книга MS Excel или расширение файла надстройки остается тем же , что и до компиляции.
- Компилятор VBA работает с копией исходного файла, а сохраняет исходный файл без изменений .
- Преобразование кода VBA во время компиляции происходит автоматически , что означает, что не требует вашего участия в процессе.
- Вам не нужно выбирать, какие функции VBA нужно компилировать — все методы кода VBA (процедуры, функции и свойства) будут скомпилированы одним щелчком мыши на кнопке «Компилировать».
- Скомпилируйте код VBA с защитой от копирования вместе с ключом активации / регистрации. Такой скомпилированный код VBA не будет работать без ключа регистрации / активации, который сможете выдать только вы.
- Создайте пробную / демонстрационную версию вашего кода VBA. Ваши клиенты смогут опробовать вашу книгу или надстройку Excel без регистрации в течение ограниченного количества дней, определяемого вами.
Как работает компилятор VBA
DoneEx VbaCompiler преобразует исходный код VBA в код C, и на заключительном этапе код языка C компилируется в собственный файл DLL Windows.
При компиляции преобразование исходного кода VBA проходит несколько этапов:
Этап 1. VbaCompiler разбирает и анализирует исходный код VBA.
Этап 2. Продукт генерирует объектный код по результатам первого этапа.
Этап 3. Продукт генерирует код языка C из объектного кода, созданного на этапе 2.
Этап 4. VbaCompiler запускает C-компилятор для компиляции кода языка C (который был сгенерирован на этапе 3) в Windows DLL.
Этап 5. Заключительный этап компиляции — VbaCompiler удаляет скомпилированный код VBA из файла и генерирует соединительный код VBA, в котором все скомпилированные функции DLL вызываются вместо исходного кода VBA.
Выдержка из исходного кода VBA перед компиляцией
Тот же код VBA после компиляции с помощью VBA Compiler
Как видите, содержимое функций VBA перемещается в скомпилированный файл DLL и заменяется вызовами функций DLL.