Горшков Ю.В., г. Сальск



Знакомство с VBA.

 

Запустим программу Excel (Пуск-> Программы-> Microsoft Excel) и откроем редактор VBA (Alt +F11). Также можно добавить панель инструментов "Visual Basic"и использовать для открытия редактора кнопку на данной панели. (Сервис->Настройка->Панели инструментов)(См. Рис.1)

Рис. 1. Установка панели инструментов "Visual Basic":

-поставить галочку (1);

-появится панель инструментов "Visual Basic"(2);

-для вызова редактора VBA нажать кнопку (3).

 

При работе с редактором VBA нам понадобятся несколько кнопок на панели Standard (см. Рис.2):

Рис.2. Для работы нам достаточно будет ТРЁХ кнопок:

- Insert UserForm(Добавить форму)-1;

- Run Sub/UserForm(Запустить программу/ форму)-2;

- Reset (Сброс)-3.

 

Состав нашего проекта отображается в окне Projtct(Проект -см.1 Рис.3), а свойства выделенного объекта в окне (Свойства –см. 2 Рис.3) Пока в нашем проекте нет самого главного – Формы (Properties UserForm). Добавим Форму в наш проект (нажать кнопку Insert UserForm)(на рис.3 данное действие выделено зелёным цветом). Теперь появилось окно UserForm (см. 3 Рис.2) и панель -Toolbox (Панель элементов 4 Рис.3).

 

Рис.3. Рабочие окна редактора VBA:

- Окно проекта (Projtct) (1);

- Окно свойств (Properties)(2);

- Окно формы(UserForm) (3) и панель элементов к нему(Toolbox)(4);

- Окно кодов (Code)(5).

Форма (UserForm)- заготовка нашей программы, а Toolbox- панель с элементами управления. Интерфейс программы формируется нанесением элементов управления с панели инструментов Toolbox на форму. Щелкнем на Toolbox по элементу CommandButton(Кнопка), а затем переведём курсор мыши на нашу форму UserForm и щелкнем по ней.(на рис.3 данное действие показано красным цветом) Появится элемент управления «КНОПКА»(CommandButton). Перейдём в окно Properties (Свойства) и для объекта CommandButton установим свойства:

Name: “cmdExit"
Caption: “Выход"

Теперь сделаем по кнопке «Выход» мышью двойной щелчок и откроется окно Code c пустым телом программы. В том месте, где находится клавиатурный курсор, введем команду End.(см 5 Рис.3) Вот и всё! Запустим нашу программу(на панели Standard нажмём кнопку «►»- Run Sub/UserForm).(см Рис.4)

Рис. 4. Программа в работе. (Программа появляется на фоне таблицы Excel)

 

Появилась наша программа! Пока она выполняет только одну задачу «Выход».Если нажать на нашу клавишу «Выход» сработает программный код-End и программа будет завершена.

Как работает наша программа? VBA – язык событийно-управляемого программирования. При нажатии на кнопку «Выход» происходит событие CommandButton1_Click(нажатие кнопки). Для данного события вызывается программа:

Private Sub cmdExit_Click()

End ‘Завершить программу.

End Sub

 

Форма и элементы управления, размещенные на ней, являются объектами. Объект имеет свойства, которые можно задавать как вручную в окне свойств, так и программно. Самое главное свойство объекта- Name. Для нашей кнопки VBA по умолчанию присвоил имя: CommandButton1. Это имя можно изменить. (Желательно это сделать, перед тем как писать для данного объекта программный код). В нашем примере кнопка имеет имя cmdExit, где первые три буквы(cmd) указывают на тип объекта, а остальная часть имени имеет смысловое значение (Exit).

Теперь рассмотрим как изменить свойство объекта программно. Сделаем двойной щелочек мышей по нашей форме UserForm1 и откроется Code c пустым телом программы для события "UserForm_Click"(щелчок по форме). В тело программы впишем код (См. Рис. 5):

 

cmdExit.ForeColor = RGB(255, 0, 0) 'Цвет надписи на кнопке - красный

 

 

Рис. 5. Программный код для события "UserForm_Click"(щелчок по форме)

 

Для изменения свойства объекта программным способом пишем имя объекта(в данном случае имя кнопки: cmdExit), а затем через точку свойство объекта(ForeColor) и его значение. И так если теперь запустим программу и кликнем по форме, то цвет надписи должен измениться на красный.

Если нужно написать программу для другого события, то это можно сделать, выбрав из правого верхнего списка нужное событие для данного объекта

(См.2 Рис.5). Если нужен другой объект, например кнопка cmdExit, то это можно сделать, выбрав его из левого верхнего поля со списком.(См.1 Рис.5)

Готовый пример:Primer1.rar

 

Горшков Ю.В., г. Сальск

Свои вопросы можно присылать на: mailto:vbadevir@narod.ru

 

 

Создаём первый проект VBA.

 

Рассмотрим алгоритм программы. Программа должна ввести данные для расчёта, произвести расчёт и вывести результат. В программах для DOC весь алгоритм осуществляется в теле программы(См. а) Рис.1), а в нашем проекте VBA (См. б) Рис.1) ввод и вывод данных осуществляется через визуальные объекты, которые должны быть расположены на форме. Всё это представляет собой графический интерфейс нашей программы. При нажатии клавиши "Расчёт" вызывается программа(Код макроса), которая поучает данные от объектов ввода данных и производит расчёт и затем передаёт результат расчёта объекту вывода.

Рис.1. Сравнение Алгоритмов.

 

Ввод данных производится через объект "TextBox", а вывод через "Label".

 

Теперь при помощи VBA решим простую задачу расчёта длины медного провода диаметром 0,1 мм, если нам известно его сопротивление. Для расчёта воспользуемся формулами[1]и [2].

L=p*R/S [1]

 

,где L- расчетная длина провода(м);

p-удельное сопротивление(p= 0.0175);

R-заданное сопротивление (Ом);

S=(p*D 2)/4 [2]

Запустим программу Excel, перейдем в редактор VBA и к новому проекту добавим форму, как было сделано ранее. Но теперь на форму поместим несколько объектов разного типа (см. рис.2):

1. Четыре элемента типа Label(на рис.2 отмечены красной линией). Три из них применим как поясняющие надписи, а четвертый для вывода результата. Перенесём с Toolbox (Панель элементов) на форму элементы Label и изменим для них свойства:

Элемент управления Свойства Значение
Label1 Caption Сопротивление(Ом):
Label2 Caption Диаметр (мм): 0.1
Label3 Caption Длина провода (М):
  LblL Caption  
SpecialEffect 2- SpecialEffectSunken
TextAlign 3- TextAlignRight

Три элемента управления применены как поясняющие надписи(Lablel1, Label2, Label3), а четвёртый предназначен для вывода результата расчёта(lblL).

Для ввода данных поместим на форму элемент управления другого типа- textBox. Установим для него свойства следующим образом:

(На рис.2 отмечено синим цветом)

Свойства Значение
Name TxtR
Caption  
TextAlign 3- TextAlignRight

И последнее. Добавим на форму элемент управления типа кнопка (CommandButton)

(На рис.2 отмечено жёлтым цветом)

Установим для кнопки следующие свойства:

Свойства Значение
Name CmdR
Caption Расчёт

 

Рис.2. Проект нашей первой программы.

 

Напишем для кнопки программный код. Сделать по элементу управления кнопка двойной щелчок и появится окно программного кода 5 (на рис.2). В данном окне напишем следующее:

 

Dim R, D, P, S, L As Single ' Определяем переменные как числа с плавающей точкой

 

Private Sub cmdR_Click()

R = Val(txtR.Value) 'ВВОД. Получаем значение для расчёта и преобразуем в числовой формат

D = 0.1

P = 0.0175

'***** Р А С Ч Ё Т

S = (3.1415926 * D ^ 2) / 4

L = P * R / S

'*****************

lblL.Caption = L ' В Ы В О Д

End Sub

Первой строкой идёт определение переменных как Single (числа с плавающей точкой обычной точности: в диапазоне от -3,402823E38 до -1,401298E-45 для отрицательных значений и от 1,401298E-45 до 3,402823E38 для положительных значений), затем идёт текст программы, которая вызывается при нажатии кнопки.

Следует отметить, что внесённое значение сопротивления находится в свойстве Value элемента управления txtR и, чтобы его получить, нужно сначала написать имя объекта, а затем через точку необходимое нам свойство. Значение сопротивления необходимо преобразовать из символьного типа в числовой при помощи функции Val() (Если десятичное значение внесено через запятую, то преобразовывать необходимо функцией CDbl()!!!). Теперь нажмем кнопку «►» на стандартной панели, если всё сделано правильно можно произвести расчёт. Работа программного кода показана на Рис.3.

 

Рис. 3. Так работает нашапрограмма.

Если нужно отладить программу, то можно установить точку останова и после запуска программы в данном месте произойдёт остановка программы и можно посмотреть значения переменных. (Рис 4). Чтобы установить точку останова нужно щелкнуть мышей слева от нужной строки(появиться красный кружочек 1 Рис 4), а повторное нажатие снимает точку останова. После запуска программы и попадания на точку останова можно подвести курсор мыши к переменной и посмотреть её значение на данный момент 2 (Рис 4). (Важно!!! Если значение находится в кавычках, то оно имеет символьный тип)

Рис. 4. Работа отладчика.

Чтобы производить расчёт для любого диаметра провода, нужно добавить на форму поле ввода как это было сделано для длины провода. Для нового поля ввода данных установим свойство Name: txtD, а в программе строку D = 0.1 нужно заменить на D = Val(txtD.Value)

Теперь можно производить расчёты для любого заданного диаметра провода.

Результат желательно округлить. Для этого нужно вместо строки

lblL.Caption = L ' В Ы В О Д

написать:

LblL.Caption = Format(L, "0.000") ' В Ы В О Д

(функция Format() позволяет выводить результат в заданном формате. Важно!!! В отличии от Round() данная функция работает во всех версиях Excel, поэтому желательно применять функцию Format())

И еще по вводу. Чтобы можно было вводить числа как через точку, так и через запятую, напишем функцию TransD. Данная функция проверяет что в строке стоит. Если точка, то применяется функция Val(), а иначе CDbl(). В окне Code, ниже процедуры расчета, напишем следующий код:

 

'Данная функция решает проблему запятой

Private Function TransD(txtS As String)

Dim A As String

Dim X As Single

Dim F As Integer

A = txtS

F = InStr(A, ".") 'Поиск символа "." в строковой переменной А

If F <> 0 Then ' Если точка найдена то преобразование выполняется функцией Val()

X = Val(A)

Else ' Иначе преобразование выполняется функцией CDbl()

X = CDbl(A)

End If

TransD = X

End Function

 

А код процедуры расчёта должен выглядеть так:

Private Sub cmdR_Click()

R = TransD (txtR.Value) 'ВВОД

D = TransD (txtD.Value)

P = 0.0175

'***** Р А С Ч Ё Т

S = (3.1415926 * D ^ 2) / 4

L = P * R / S

'*****************

lblL.Caption = L ' В Ы В О Д

End Sub

 

/////////////////////////////////////////////////////////////////////////////

Более подробно о применении тех или иных функциях или операторах VBA можно узнать из встроенной справочной системы (?->"Содержание и предметный указатель" см. Рис.5)

Рис. 5. Вход в справочную системуVBA.

 

Готовые примеры "Rrasch1.xls" и "RRasch2.xls" в архиве: Rrasch.rar.

 


Дата добавления: 2015-12-17; просмотров: 14; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!