Visual Basic for Applications (VBA) – развитая система визуального программирования для создания прикладных программ в среде Microsoft Office.
Технология визуального программирования, реализованная в языке VBA, позволяет пользователям создавать приложения и самостоятельно решать многие задачи, не обращаясь к услугам профессиональных программистов.
Единая интегрированная среда VBA выглядит одинаково во всех приложениях Microsoft Office, то есть в Access, Excel, Word, PowerPoint.
С помощью VBA можно создавать объекты управления графического интерфейса пользователя, задавать и изменять свойства объектов, подключать к ним соответствующий программный код.
Методика программирования с использованием средств VBA сводится к следующему:
Автоматизировать обработку данных можно двумя способами: посредством макросов и путем программирования на языке Visual Basic for Applications (VBA).
Макрос – это последовательность макрокоманд, объединенных в одну для автоматизации работы. Макросы обеспечивают автоматическую запись действий пользователя в виде операторов VBA.
VBA относится к языкам объектно-ориентированного программирования.
Объект - основной элемент VBA. В VBA Excel объектами являются рабочая книга, рабочий лист и его составляющие, например:
и другие.
Работа с объектами возможна через его методы и свойства.
Над объектами можно совершать различные действия. Методы - это действия, совершаемые над объектами.
Например, ячейку или диапазон ячеек можно очистить (Clear), можно выбрать (Select), приложение закрыть (Quit), пользовательскую форму показать (Show) или скрыть (Hide).
Название метода отделяется от названия объекта точкой:
название объект . название метода
Range("B2:E2").Select - выбрать диапазон ячеек B2:E2;
Range("C1:C5").Clear - очистить диапазон ячеек C1:C5;
UserForm2.Hide - скрыть форму под номером 2;
UserForm5.Show - показать форму под номером 5;
Application.Quit - выйти из приложения.
Свойства служат для описания, задания характеристик объектов. Например, размера и цвета шрифта, положения формы на экране или состояние объекта (доступность, видимость), задания значений. Чтобы задать или изменить характеристику объекта, надо изменить значение его свойства, т.е. присвоить ему определенные значения.
Синтаксис задания значения свойства следующий:
Объект.Свойство = Значение Свойства
Объект - обозначает имя объекта;
Свойство - имя свойства, которому присваивается значение, имя объекта отделяется от имени свойства точкой.
Cell(1,2).Value = 2011 - поместить в ячейку В1 значение 2011.
Range("A1:A12").Text = "Программа" - поместить в диапазон ячеек А1:А12 текст Программа.
Range("C2").Font.Size = 18 - в ячейке С2 установить размер шрифта 18.
Свойства:
В VBA для каждого объекта определен набор стандартных событий.
Например, стандартное событие для объекта CommandButton (кнопка) - Click (щелчок мышью).
Если пользователь нажимает на кнопку, то это событие. На это событие должен быть отклик, т.е. выполнение какой-либо процедуры (программы). Такая процедура называется процедурой обработки события и имеет стандартное имя. Если такой отклик не создан, т.е. не написана соответствующая процедура, то система не будет реагировать на это событие. Для каждого события можно написать процедуру, которая будет срабатывать именно тогда, когда это событие произойдет. На каждое событие пишется своя процедура, которая это событие обрабатывает, т. е. выполняет определенные действия, которые должны быть выполнены, когда это событие происходит. Особое значение понятие события имеет при написании процедур реакций пользовательской формы на изменения ее элементов.
Для хранения кода VBA применяются модули – самостоятельные объекты, каждый из которых содержит одну или несколько процедур.
На языке VBA процедура — это самостоятельная замкнутая программная единица, включающая операторы описания локальных данных процедуры и операторы, которые выполняются в ней.
Процедура выполняется автоматически в ответ на событие. События возникают в результате действий пользователя или выполнения программы; их может генерировать система.
– процедуры-подпрограммы Sub;
общий формат:
Sub
<тело процедуры >
End Sub
Процедура-подпрограмма Sub выполняет действия, может иметь не один ответ (результат), содержать вызовы других процедур и вызываться на выполнение из других процедур;
– процедуры-функции Function;
общий формат:
Function
<операторы>
End Function
Процедура-функция возвращает единственное значение (полученное в результате расчета, возврат текущей даты и др.). После того как она определена (создана), к ней можно обращаться как к встроенной функции.
Процедуры обоих типов могут иметь аргументы – переменные, значения которых определяют работу процедуры при конкретном вызове.
– общая (Public) – процедура доступна для всех процедур во всех модулях;
– личная (Private) – процедура доступна для других процедур только в том модуле, в котором она объявлена.
Если процедуры не используются вне данного модуля, их следует декларировать как личные процедуры. При объявлении личной процедуры в первой строке перед ключевым словом Function или Sub вставляется префикс Private:
Private Function Имя ()
или
Private Sub Имя () .
Рассмотрим синтаксис на примере процедуры-подпрограммы.
Процедуры начинаются ключевым словом Sub.
Ключевое слово — это слово или символ, которые распознаются как элемент языка VBА.
[Private | Public][Static] Sub имя ([список_аргументов])
[Dim AS < тип данных>]
<тело_процедуры >
[Exit Sub]
<тело_процедуры >
End Sub
Пояснения:
[] указывают на то, что заключенный в них параметр является необязательным;
Sub - основное ключевое слово (глагол) процедуры; означает, что идущие за ним строки есть тело процедуры (подпрограммы);
[Private] - процедура, доступная для других процедур только того модуля, в котором она написана;
[Public] - объявление процедуры общедоступной, т. е. объявленную процедуру могут вызывать из окон других процедур во всех модулях;
[Static] - локальные (объявленные в теле процедуры) переменные сохраняются в промежутках времени между вызовами этой процедуры;
«имя» - имя процедуры;
[список_аргументов] - перечисленные через запятую переменные, которыми задаются передаваемые процедуре параметры при ее вызове;
<тело_процедуры > - операторы программы выполнения процедуры;
EndSub — конец описания процедуры.
Ключевое слово Sub определяет начало процедуры, a End Sub - конец процедуры.
При записи нескольких операторов в одной строке надо отделять их двоеточием (:).
Если в существующем модуле нужно добавить процедуру, следует выполнять пп. 3–6.
В программировании базовыми понятиями являются «переменная» и «значение переменной».
Переменная (variable) - это величина (объект), значение которой меняется в ходе выполнения программы. Переменная в компьютере представляется по присвоенному ей имени (идентификатору), и ее значение определяется оператором присваивания.
Для каждого идентификатора переменной выделяется место в памяти, где хранится ее значение.
Для каждого встречаемого в программе нового имени переменной VBA автоматически определяет ее (выделяет для нее место в памяти). Это место остается пустым до присвоения переменной какого-либо значения. Переменные сравнивают с контейнерами для хранения данных любых типов.
Типы данных делятся на
Тип |
Префикс | Символ описания |
Размер |
Значение (может содержать) |
---|---|---|---|---|
Integer |
Int |
% |
2 байта |
Короткое целое число: от -32788 до +32767 |
Long |
Lng |
& |
4 байта |
Длинное целое число: |
Single |
Sng |
! |
4 байта |
Число с плавающей точкой одинарной точности: от – 3,4Е38 до +3,4Е38 |
Double |
Dbl |
# |
8 байт |
Число с плавающей точкой двойной точности: |
Byte |
Byt |
(нет) |
1байт |
Байт: от 0 до 255 |
Currency |
Cur |
@ |
8 байт |
Число с фиксированной точкой: |
String |
Str |
$ |
10 байт + +2 байта на символ |
Строка: от 0 до 65535 символов |
Boolean |
Bin |
(нет) |
2 байта |
Булевское число: True или False |
Date |
Dat |
(нет) |
8 байт |
Дата и время |
Variant |
Var |
(нет) |
< 16 байт |
Любые данные (универсального типа, определяемые пользователем) |
Object |
Obj |
(нет) |
|
Любая ссылка (указатель) на объект |
Переменные в программе объявляются, т. е. определяется тип переменной и область действия (видимости).
Объявлять переменные можно на двух уровнях
Объявление производится операторами Public и Private; на уровнях модулей и процедуры -оператором Dim; только на уровне процедуры (локальные) – оператором Static.
Инициализация объявленных переменных происходит во время компиляции: числовой переменной присваивается значение нуль (0); строковой переменной – пустая строка (нулевой длины); переменной типа Variant – значение Emtry (отсутствие значения). Значение переменной изменяется в процессе выполнения программы.
Для объявления переменной или массива используется оператор Dim. Его упрощенный формат для объявления переменной:
Dim <имя переменной> AS <имя типа >
Примеры описания переменных:
переменная А объявлена целой (As Integer)
переменная Коэффициент объявлена действительным числом единичной длины (As Single)
Результат объявлен действительным числом двойной точности (As Double).
Объявление массива – это задание имени массиву, определение типа его элементов и количества элементов. Элемент массива является переменной и может быть использован, как любая классическая переменная. Массивы могут быть числовыми или символьными.
Dim <имя массива> (<список размерности>) AS <имя типа >)
Примеры описания массивов:
одномерный массив целых чисел
двумерный массив
Как и переменные, константы имеют имя, но не изменяют своего значения во время выполнения программы. Для определения констант в Visual Basic используется оператор Const такого формата:
[Public | Private] Const {имя константы [AS <тип данных>] = <константное выражение>}…
Примеры объявления констант:
Если при явном объявлении переменной не указан тип данных, заданы оператор Dim и ее имя, будет создана переменная типа Variant.
Желательно, чтобы имя переменной или константы указывало на содержательный смысл величин. Также при создании имён нужно придерживаться следующих правил:
Переменные могут создаваться VBA автоматически по мере появления в процедуре (неявное объявление). Переменные, которые не объявляются явно, по умолчанию имеют тип Variant.
Неявное объявление переменных допустимо только в случае отсутствия оператора Option Explicit в области описания модуля. Чтобы при создании нового модуля предотвратить появление этого оператора в области описания, следует отключить опцию Require Variable Declaration диалогового окна настройки параметров.
Оператор | Выполняемое действие |
---|---|
^ |
Возведение в степень |
- |
Отрицание |
* |
Умножение |
/ |
Деление |
\ |
Целочисленное деление |
Mod |
Определение остатка от деления |
+ |
Сложение |
- |
Вычитание |
Функция | Описание |
---|---|
Abs(x) |
Возвращает абсолютное значение заданного числа. |
Atn(x) |
Возвращает значение типа Double, содержащее угол, значение тангенса которого равно заданному числу. |
Cos(x) |
Возвращает значение типа Double, содержащее косинус заданного угла. |
Exp(x) |
Возвращает значение типа Double, содержащее число e (основание натуральных логарифмов) в заданной степени. |
Log(x) |
Возвращает значение типа Double, содержащее логарифм заданного числа. Этот метод является перегруженным и может возвращать как натуральный логарифм заданного числа (по основанию e), так и логарифм числа по заданному основанию. |
Round(x) |
Возвращает значение типа Double, содержащее ближайшее к заданному значение. |
Sgn(x) |
Возвращает значение типа Integer, показывающее знак числа. |
Sin(x) |
Возвращает значение типа Double, определяющее синус угла. |
Sqr(x) |
Возвращает значение типа Double, определяющее квадратный корень числа. |
Tan(x) |
Возвращает значение типа Double, содержащее тангенс угла. |
Оператор | Описание |
---|---|
> |
Стандартные логические операции |
Or |
Выполняет операцию логического ИЛИ (сложения) для двух выражений. результат=выражение1 Or выражение2 |
And | Возвращает результат конъюнкции (логического И) для двух выражений. результат=выражение1 And выражение2 |
Not | Выполняет над выражением операцию логического отрицания. результат=Not выражение |
Для ввода данных используется оператор присваивания или функция InputBox.
Оператор присваивания предназначен для присвоения переменной значения выражения
а=200
а=а+1
Функция InputBox расширяет возможности организации диалога с пользователем, позволяя ввести данные в окне. Функция имеет следующий синтаксис:
InputBox (сообщение[,заголовок, …]
Пояснения
сообщение – это подсказывающее сообщение, которое нужно вывести в диалоговом окне
заголовок – это текст, который будет помещен в строку заголовка диалогового окна. Если этот параметр будет опущен, строка заголовка будет пустой.
а = InputBox (“Введите число а”, “Ввод данных” )
Выполнение этого оператора вызовет появление окна.
Переменной а будет присвоено значение, введенное пользователем и выполнение программы продолжится.
Для вывода данных используется функция MsgBox. Эта функция выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата.
MsgBox (prompt[,buttons][,title][,helpfile,context])
Prompt – обязательный аргумент. Строковое выражение, отображаемое как сообщение в диалоговом окне. Строковое значение prompt может содержать несколько физических строк. Для разделения строк допускается использование символа возврата каретки (Chr(13)), символа перевода строки (Chr(10)) или комбинации этих символов (Chr(13)) & (Chr(10)).
Buttons – необязательный. Числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку. Значение по умолчанию этого аргумента равняется 0, в этом случае отображается только кнопка ОК.
Константа | Зна- чение |
Описание |
---|---|---|
VbOKOnly |
0 |
Отображается только кнопка OK. |
VbOKCancel |
1 |
« « « OK и "Отмена" (Cancel) |
VbAbortRetry-Ignore |
2 |
« « "Прервать" (Abort), Повторить" |
VbYesNoCancel |
3 |
« « "Да" (Yes), "Нет" (No) и "Отмена" (Cancel) |
VbYesNo |
4 |
« « "Да" (Yes) и "Нет" (No) |
VbRetryCancel |
5 |
« « "Повторить" (Retry) и "Отмена" (Cancel) |
VbCritical |
16 |
Используется значок "Критическое сообщение" |
VbQuestion |
32 |
« « "Предупреждающий запрос" |
VbExclamation |
48 |
« « "Предупреждение" |
VbInformation |
64 |
Значок "Информационное сообщение" |
y = MsgBox ("Найти квадрат числа а?" & Chr(13) & "Нажмите кнопку", 4)
Его выполнение вызовет появление окна, представленного на рисунке.
Если нажата клавиша «Да» в программе вычисляется a2 = a ^ 2 и задаётся оператор вывода результата:
MsgBox "Квадрат числа а = " & a2
выполнение которого выведет окно
Н = MsgBox ("Работа проведена успешно" & Chr(13) & "Спасибо", 0+64)
Программа состоит из последовательности операторов. Оператор – самый малый исполняемый элемент в языках программирования.
Операторы в одной строке отделяются друг от друга символом «двоеточие». Однако для удобства отладки и модификации программ рекомендуется в одной строке писать один оператор. Если он не помещается в одной строке, то для его переноса (продолжения) на следующую строку ставятся два символа: «пробел» и «подчеркивание». Оператор может быть помечен меткой.
Оператор присваивания Let обозначается знаком «равно» (=), но это не знак математического равенства. Он предназначен для присвоения переменной значения выражения. Это основной оператор, выполняющий вычисления заданного выражения.
[Let] переменная = выражение
Переменная – это имя переменной или имя функции. Знак «=» читается «присвоить». «Переменная» получает значение выражения, записанного справа от знака «=». Значением «выражение» может быть:
- имя переменной, например S = А; типы обеих переменных должны быть одного типа;
- значение константы, например S = 25.4;
- арифметическое выражение, например S = А + S.
В операторе присваивания типы переменной слева и выражения справа от знака « = » должны быть совместимы.
Оператор комментария предназначен для комментирования отдельных операторов, участков программы, модулей. Начинается с ключевого слова RЕМ или апострофа (‘) и может включать любой текст в строке справа от оператора, который комментируется.
Примеры.
S = 3.14 R ‘Площадь круга‘
Stoim = Kol * Cena ‘ Стоимость материалов‘
Оператор условного перехода IF передает управление ходом выполнения программы в зависимости от истинности некоторого условия.
Формат оператора:
If условие Then
[операторы]
Else
[ИначеОператоры]]
End If
Параметр «условие» – обязательная компонента, любое выражение со значением «истина» или «ложь».
Операторы – один или несколько операторов.
Если условие истинно, выполняются операторы после ключевого слова Then; если нет, то ИначеОператоры.
If srednball < 4
Then stip = 0
Else stip = 250000
End If
Иногда оператор ветвления применяется в сокращённой форме (без Else).
If myDate < Now Then myDate = Now End If
Если после Else нужно выполнить ещё одну проверку, тогда используют вложенное ветвление:
If условие Then
[операторы]
ElseIf условие1 Then
[операторы1]
Else
[ИначеОператоры]
End if
Функция вычисляет премию Bonus, зависящую от значения переменной point(показатель работника) и от salary (объёма продаж):
Function Bonus(point, salary)
If point = 1 Then
Bonus = salary * 0.3
ElseIf point = 2 Then
Bonus = salary * 0.5
Else
Bonus = 0
End If
End Function
Оператор выбора одной из нескольких альтернатив Select Case (оператор вычисляемого перехода) передает управление в зависимости от результата сравнения значения некоторого выражения со списком или диапазоном значений.
Формат оператора:
Select Case <проверяемое-выражение >
[Case <список-сравнение-1>
[ <операторы-1>]]
…
[Case Else
[<ИначеОператоры>]]
End Select
Оператор Select Case выбирает и исполняет одну из последовательностей операторов Case. Параметр проверяемое выражение должен присутствовать обязательно, его значение может быть числовым или строковым.
Параметр список-сравнение-1 также должен присутствовать в строке Case. Список сравнений, компоненты которого перечисляются через запятую, может иметь одну из трех форм:
- «выражение» - задает отдельное значение;
- «выражение» ТО выражение»;
- «IS <оператор-сравнение>выражение», где оператор-сравнение - это { = | > | < | > | <= | >= }.
Если «проверяемое выражение» совпадает с одним из выражений параметра «список-сравнение», то выполняется «оператор-1»; если «проверяемое выражение» удовлетворяет несколько предложений Case, выполняются только операторы первого Case; если «проверяемое выражение» не находит своего значения в предложении Case, выполняются <ИначеОператоры>, расположенные после предложения Case Else.
Операторы для организация циклических процессов предназначены для выполнения последовательности операторов цикла.
Циклом называется программа или часть программы, которая содержит многократное выполнение одних и тех же операторов (тела цикла) при различных значениях промежуточных данных.
Применяются такие операторы циклов:
Оператор цикла с параметром For... Next выполняет операторы тела цикла заданное число раз, имеет такой формат:
For V = V1 ТО V2 [Step V3]
Операторы тела цикла
[Exit for]
[Операторы тела цикла]
Next V
V - числовая переменная (счетчик цикла); V1 - начальное значение параметра цикла, первоначально присваивается переменной V; V2 - конечное значение параметра цикла; V3 - шаг цикла (приращение), необязательный параметр, по умолчанию он равен +1.
Шаг цикла – это число, прибавляемое к значению счетчика.
Операторы тела цикла – это последовательность операторов в теле цикла, которая будет выполнена заданное число раз.
Необязательный оператор Exit For может находиться в любом месте цикла и обеспечивает выход из цикла, не дожидаясь выполнения условия завершения цикла.
После получения управления вычисляются, если необходимо, выражения V1 и V2, затем они сравниваются, и пока V1 будет меньше или равно V2, выполняется последовательность операторов (может быть и один оператор) тела цикла, пока не встретится оператор Next.
В конце каждого шага
Как только выражение V1 превысит выражение V2, управление передастся на выполнение оператора, записанного после оператора конца цикла NEXT (происходит выход из цикла).
Оператор Next устанавливает границу, за которой заканчивается цикл. Он изменяет значение переменной V на величину шага цикла V3. При положительном значении шага параметр увеличивается на величину шага, при отрицательном – уменьшается.
Найти произведение чисел (S) от 1 до 50. Опишем цикл с оператором FOR:
i = 1
S = 1
For i = 1 TO 50 Step 1
S = S * i
Next i
Цикл с неизвестным числом повторений While используется для выполнения операторов в теле цикла до тех пор, пока условие сохраняет значение «истина».
Найти произведение чисел (S) от 1 до 50. Опишем цикл с оператором While:
i = 1
S = 1
Do While i < 50
S = S * i
Loop
Ключевое слово While обозначает «пока». Значение «условие» вычисляется перед каждым выполнением тела цикла. На каждом шаге выполнения тела цикла управление передается оператору While. Как только значение «условие» примет значение «ложь», тело цикла пропускается и управление передается на оператор, записанный после цикла. Операторы тела цикла выполняются, пока истинно некоторое условие.
Цикл с неизвестным числом повторений Until, который выполняется, пока условное выражение ложно:
Найти произведение чисел (S) от 1 до 50. Опишем цикл с оператором FOR:
i = 1
S=1
Do Until i = 10
S = S * i
Loop
Цикл повторяется до тех пор, пока счетчик не достигнет жестко установленного значения — 10.
Эти циклы могут использоваться с предусловием и с постусловием. Поэтому их синтаксис в общем виде можно записать:
Do [{While | Until} условие]
Операторы тела цикла
[Exit Do]
[Операторы тела цикла]
Loop
Или можно ещё использовать такой синтаксис:
Do
Операторы тела цикла
[Exit Do]
[Операторы тела цикла]
Loop [{While | Until} условие]
Схемы работы оператора цикла While c предусловием и с постусловием |
|
|
Схемы работы оператора цикла Until c предусловием и с постусловием |
При работе в Excel, как и в большинстве, других приложениях, приходиться сталкиваться с такими элементами интерфейса, как диалоговые окна. Диалоговые окна используются повсеместно для получения информации для ввода и вывода сообщений и данных.
Одним из объектов VBA, объектом визуализации являются UserForm - пользовательские формы - это диалоговые окна интерфейса процедур VBA. С их помощью пользователь может эффективно передавать данные в процедуры и получать результаты их работы. Пользовательские формы дают возможность пользователю создавать диалоговые окна в разрабатываемых приложениях и размещать в окнах элементы управления.
В VBA есть две функции - MsgBox и InputBox, которые позволяют отображать простые диалоговые окна, не создавая пользовательскую форму. Эти окна можно видоизменять, использовать управляющие ими параметры, но они не имеют тех широких и эффективных возможностей опций, которые предоставляют пользовательские формы.
VBA предлагает обширные возможности, которые можно использовать при создании пользовательских диалоговых окон, для программирования элементов управления, размещаемых непосредственно на листах Excel, или для работы с диалоговыми окнами, встроенными в Excel.
Чтобы создать форму, откройте редактор Visual Basic для этотого нажмите (Alt + F11) или выберете на ленте вкладку « Разработчик», а на ней Visual Basic
В открывшемся окне Microsoft Visual Basic выбрать на ленте вкладку Insert. В открывшемся меню выбрать UserForm.
На экране появилась пустая форма UserForml, инструментальная панель Toolbox и при нажатии правой кнопки мыши контекстное меню с предложением Properties - свойства формы.
На инструментальной панели Toolbox расположены следующие элементы управления, которые являются объектами VBA :
Любой из этих элементов управления, объектов можно разместить на форме.
Например, можно поместить кнопку. Для этого мышью перетаскиваем на форму объект или элемент управления под названием CommandBatton, расположенный вторым слева в третьем ряду панели Toolbox. На форме появится кнопка CommandBatton1
Выбрав в контекстном меню Properties - свойства формы, в открывшемся окне можно изменить заголовок элементов формы, в частности кнопки, её шрифт, цвет фона, добавить картинки, добавить и изменить многие другие свойства.
Наиболее часто используемые свойства объекта UserForm:
После двойного щелчка по кнопке откроется окно редактора VBA, где уже будет создана заготовка вашей процедуры обработки нажатия на кнопку.
Теперь в тело этой процедуры можно вводить команды (операторы), которые будут выполняться, если событие в заголовке - Click мыши - произойдет. Это событие считается стандартным для кнопок, флажков, рисунков, рамок, переключателей и окон отображения текста.
Для остальных элементов - полей ввода текста, полос прокрутки, счетчиков и др. - стандартным считается событие Change, то есть их изменение.
Список возможных событий для элемента можно получить, поставив курсор внутрь процедуры и выбрав нужное из верхнего правого выпадающего меню. В верхнем левом выпадающем меню указаны все процедуры и функции программы реакции формы на события (на рисунке выше указывает черная стрелка).
Создать пользовательскую форму и написать процедуры к ней в которых реализуется ввод имени пользователя, вывод настоящей даты и времени и кнопка для завершение работы процедуры. VBA программу в целом назовём «Дата и время».
Далее рассмотрим, как написать и привязать к созданной пользовательской форме процедуру или процедуры для решения поставленной задачи. Двойной щелчок по форме позволяет открыть окно редактора VBA, где будут предложены заготовки для написания процедур
Теперь в процедуры можно вводить операторы, которые будут выполняться, если событие в заголовке - Click мыши - произойдет.
Используем заготовку для процедуры CommandButton1_Clik(), задаем в процедуре переменную под названием Имя, описываем её как строковую переменную (Dim Имя As String). Переменной Имя присваиваем текст, который будет вводиться в поле элемента управления TextBox1, указывая при этом параметр .Text или .Value. В процедуре это выглядит так:
Имя = TextBoxl.Text
Далее в поле элемента управления Label2 вводится текст, с приветствием по имени пользователя процедуры и указанием настоящей даты и времени.
В процедуре это задаётся следующим образом:
Все действия процедуры CommandButton1_Clik() будут выполняться в случаи нажатия кнопки CommandButton1, которую мы ввели на созданной форме.
В процедуре CommandButton2_Clik() используется оператор Unload Me, который закрывает форму и процедуры при нажатии кнопки «Выход», которую мы ввели на созданной форме.
Запускаем процедуру. Появится созданная пользовательская форма. В окне для ввода имени зададим имя, например « Александр», и нажмём клавишу для вывода результата работы процедуры. Получим следующий результат.
В программу включить две пользовательские формы. В первой форме с помощью элемента управления Label организовать надпись «Список автомобилей», а под ней посредством элемента управления ComboBox организовать поле со списком. В поле со списком через процедуру ввести записи в виде наименований десяти любых марок автомобилей. Кроме того, на первой форме разместить две кнопки.
В процедурах реализовать событие, которое должно произойти при нажатии кнопки «ВЫБРАТЬ». Событие состоит в выборе и передаче выбранного названия автомобиля во вторую пользовательскую форму, а именно в организованное на ней поле элемента управления TextBox. Название выбранного автомобиля вывести с размером шрифта 20 и красным цветом. В поле, отведённом для названия формы, ввести текст «Лучший автомобиль года».
Создание первой пользовательской формы.
Создание для данного примера его первой пользовательской формы с именем UserForm6 производится аналогично тому, как это делалось в разобранном выше примере "Дата и время", и будет иметь следующий вид:
Процедуры к первой созданной форме будут иметь вид
В первой процедуре используется метод AddItem, который служит для добавления в список записей или заполнения списка, обычно он помещается в обработчик события Initialize.
Метод Show служит для перехода, просмотра указанной формы.
Например, UserForm7.Show означает переход и просмотр формы с именем UserForm7.
В нашем случае это имя второй пользовательской формы рассматриваемого примера, которую нам предстоит создать.
Следует обратить внимание на то, что предлагаемые системой стандартные имена процедур и элементов управления можно менять на другие. Это позволяет сделать процедуры более удобными для чтения и понимания, особенно когда их большое количество.
В нашем примере предлагаемые имена процедур CommandBatton1_Click() и CommandBatton2_Click() заменены соответственно на имена ВЫБОР_Click() и ВЫХОД_Click().
Создание для данного примера второй пользовательской формы с именем UserForm7 производится аналогично тому, как это делалось в разобранном выше примере "Дата и время".
Вторая пользовательская форма будет иметь следующий вид:
В данной процедуре название элемента управления TextBox1 заменено на название ЛучАвто. В поле этого элемента управления передаётся запись в виде названия выбранного автомобиля в первой форме UserForm6
Созданная программа состоит из двух пользовательских форм и их процедур. Запуск программы можно произвести как в предыдущем примере или с рабочего листа Excel.
Для удобства можно организовать запуск программы с рабочего листа Excel. Для этого надо на рабочем листе Excel создать кнопку, при нажатии которой происходило бы событие, связанное с запуском процедур первой пользовательской формы UserForm6. Процесс создания такой кнопки аналогичен тому, как это делается для пользовательской формы.
На ленте вкладок Excel выбрать вкладку « Разработчик », затем « Вставить ». В открывшемся окне «Элементы управления формы» выбрать элемент управления «Кнопка»
После нажатия на элемент управления «Кнопка», на рабочем листе появиться маркер «+». Далее нажав правую кнопку мыши и смещая её установить нужные размеры кнопки, при этом откроется окно с названием «Назначить макрос объекту»
В поле «Имя макроса» можно ввести его новое имя или оставить предложенное «Кнопка6_Щелчок». Вводим новое имя «Кнопка1_Щелчок» и нажимаем кнопку «Создать». Откроется окно для ввода кода. В это окно введём код вызова пользовательской формы UserForm6, а именно UserForm6.Show.
На кнопке с названием вводим новое название, согласно условию задания, а именно «Запуск программы «Автомобиль года » »
Теперь, чтобы запустить программу, надо нажать на кнопку « VBA программа «Автомобиль года» ». На рабочем листе появится первая созданная форма
Из приведённого списка курсором выбираем нужную марку автомобиля, например «ВОЛГА» и нажимаем левую кнопку мыши. Пользовательская форма примет следующий вид:
Далее «нажать кнопку» ВЫБРАТЬ». Происходит запуск в работу второй пользовательской формы. Вторая пользовательская форма буде выглядеть следующий образом:
Создать пользовательскую форму и процедуры к ней в которых реализуется ввод даты, до которой требуется узнать количество оставшихся дней, например до Вашего дня рождения. Организовать вычисление и вывод количества оставшихся дней до указанной даты, создать кнопки ввода данных, повторения и завершения работы программы. VBA программу назовём «Остаток дней». Предусмотреть запуск программы с листа Excel. В поле, отведённом для названия формы, ввести текст «Лучший автомобиль года».
Порядок создания пользовательской формы аналогичен примерам "Дата и время" и "Автомобиль года" и может быть выполнена в следующем виде:
Процедуры для данной пользовательской формы будут иметь вид:
Пользовательская форма для запуска VBA программы с листа Excel может быть представлена в виде кнопки (Кнопка10) с надписью «VBA программа « Остаток дней» ».
При этом процедура для пользовательской формы будет иметь следующий вид:
Функция DateDiff используется для вычисления разности двух дат. Возвращает значение типа Variant(Long), указывающее число временных интервалов между двумя датами.
Общая форма записи функции DateDiff
DateDiff(Interval,Date1,Date2,[FirstDayOfWeek],[FirstWeekOfYear])
Interval - обязательный аргумент типа String, указывающий тип добавляемого временного интервала:
- yyyy - год,
- q - квартал,
- m - месяц,
- y - день года,
- d - день месяца,
- w - день недели,
- ww - неделя,
- h - часы,
- n - минуты,
- s - cекунды;
Interval не чувствителен к регистру букв. Литерал должен быть заключен в кавычки.
Date1 - обязательный аргумент типа Variant(Date) или литерал даты - первая календарная дата при вычислении разности дат;
Date2 - обязательный аргумент типа Variant(Date) или литерал даты - вторая календарная дата при вычислении разности дат;
FirstDayOfWeek - необязательный аргумент типа Long, определяющего день недели, допускается использование констант;
- vbUseSystem=0 - используется значение национальных системных установок:
- vbSunday=1 - воскресенье(по умолчанию),
- vbMonday=2 - понедельник,
- vbTuesday=3 - вторник,
- vbWednesday=4 - среда,
- vbThursday=5 - четверг,
- vbFriday=6 - пятница,
- vbSaturday - суббота;
FirstWeekOfYear - необязательный аргумент - числовая константа, указывающая, какой день недели считать первым;
- vbUseSystem=0 используется системная информация;
- vbFirstJan1=1 неделя, содержащая 1 января;
- vbFirstFourDays=2 первая неделя, содержащая как минимум 4 дня нового года;
- vbFirstFullWeek=3 первая полная неделя года.
Вычислить сколько дней осталось до 22 века
Dim Today as Date ' сегодняшний день
Dim Millenium As Date ' 1 день 22 века
Dim retval ' возвращаемое значение
Today=Date 'узнаем текущую системную дату
Millenium=''01.01.2201"
retval=DateDiff ("d",Today,Millenium)
При нажатии на клавишу с названием «VBA-программа «Остаток дней»» на листе Excel появиться пользовательская форма. При вводе в неё интересующей Вас даты, например, 12.03.2012, считая, что текущая дата 04.01.2012, форма примет следующий вид.
Создать VBA программу под названием «Таймер». В программу включить пользовательскую форму и процедуры к ней, в которых реализуется ввод временной задержки в секундах, сообщение об истечении заданного времени и организованы кнопки ввода данных, повтора и завершения работы программы.
Предусмотреть запуск программы с листа Excel.
Порядок создания пользовательской формы аналогичен рассмотренным выше примерам. Пользовательская форма для данного примера может быть выполнена, например, в следующем виде:
Процедуры для данной пользовательской формы будут иметь вид:
.
Пользовательская форма для запуска VBA программы с листа Excel может быть выполнена следующим образом:
Здесь пользовательская форма представлена в виде кнопки (Кнопка9) с надписью «VBA программа « Таймер» ».
Процедура для пользовательской формы в виде кнопки, представленной выше, будет иметь следующий вид:
Замечания.
Функция Timer используется для получения числа секунд, прошедших с полуночи до текущего момента дня. Возвращает значение типа Single, представляющее число секунд, прошедших после полуночи. Значение, возвращаемое таймером, ограничено числом секунд в сутках и обнуляется ровно в полночь. Эта функция не содержит аргументов.
При нажатии на клавишу с названием «VBA программа «Таймер» » на листе Excel появиться пользовательская форма. При вводе требуемой временной задержки в секундах и нажатии на кнопку, после истечения заданной задержки, на форме появится сообщение « В Р Е М Я!!! » и форма примет вид, представленный ниже:
Создать vba программу под названием «Игра», в которой требуется угадать число, которое случайным образом выдаст программа. В пользовательской форме и процедурах к ней организовать ввод задуманного числа в пределах от 1 до 10-ти и его сравнение с числом, которое случайным образом, в тех же пределах, выдаёт программа. В случае если числа не равны, должно быть выдано сообщение «ВЫ ПРОИГРАЛИ» и значения чисел, а в случае если числа равны - сообщение «ВЫ ВЫИГРАЛИ!!!» и так же значения чисел.
Предусмотреть организацию кнопок для повторения или завершения работы программы и запуска программы с листа Excel.
Порядок создания пользовательской формы аналогичен рассмотренным выше примерам. Пользовательская форма для данного примера может быть выполнена, например, в следующем виде:
Процедуры для данной пользовательской формы будут иметь вид:
Форма для запуска программы с листа Excel, может быть представлена следующим образом:
Здесь пользовательская форма представлена в виде кнопки (Кнопка 1) с надписью «VBA программа « Игра» ».
Процедура для пользовательской формы, представленной выше, будет иметь следующий вид:
Замечания.
Функция Rnd [ (Number)], Rnd (Random) служит для генерации случайных чисел.
Функция Rnd возвращает значение в диапазоне от 0 до 1 типа Single, содержащее случайное число (причем 1 не входит в этот диапазон, а 0 входит). Строго говоря, функция возвращает псевдослучайные числа. При каждом запуске программы, функция генерирует одну и ту же последовательность случайных чисел. Во избежание этого явления используйте инструкцию Randomize.
Чтобы получить значения случайных чисел в интервале от min до max используется формула:
Int ( (max — min + 1) * Rnd + min)
где:
min и max - минимальное и максимальное число соответственно;
Number - необязательный аргумент представляет число типа Single
или любое допустимое числовое выражение.
Аргумент может принимать следующие значения:
- аргумент опущен или больше 0 - генерируется следующее случайное число в последовательности. При повторном запуске программы генерируется аналогичная последовательность случайных чисел.
- Аргумент отрицательный - генерируется одно и то же число, используя аргумент как опорное число.
- Аргумент равен 0 - генерируется одно и то же число, используя число при предыдущем вызове функции.
При нажатии на клавишу с названием «VBA программа «Игра» » на листе Excel появится пользовательская форма. После ввода задуманного числа и нажатия кнопки ввода программа определяет случайное число и сравнивает его с введённым числом. Если числа не равны, то на форме появляется сообщение «ВЫ ПРОИГРАЛИ» и значения чисел. Если числа равны, то на форме появится сообщение «ВЫ ВЫИГРАЛИ!!!» и значения самих чисел