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

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

[Image]

Рис.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

Сопротивление(Ом) :

Label 2

Caption

Диаметр ( мм ) : 0.1

Label3

Caption

Длина провода (М) :

LblL

Caption

SpecialEffect

2- SpecialEffectSunken

TextAlign

3- TextAlignRight

Три элемента управления применены как поясняющие надписи( Lablel 1, Label 2, Label 3), а четвёртый предназначен для вывода результата расчёта( lblL ).

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

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

Свойства

Значение

Name

TxtR

Caption

TextAlign

3- TextAlignRight

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

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

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

Свойства

Значение

Name

CmdR

Caption

Расчёт

[Image]

Рис.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.

[Image]

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

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

[Image]

Рис. 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 )

[Image]

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

 


Страница сайта http://silicontaiga.ru
Оригинал находится по адресу http://silicontaiga.ru/home.asp?artId=4791