Модернизация первого проекта VBA.




1. Начальные установки в программе.

Продолжаем разрабатывать проект программы. Запустим программу из файла "RRasch2.xls", где было добавлено поле txtD для ввода значения диаметра провода. Введём значение сопротивления 1 Ом и попробуем нажать кнопку "Расчёт". Программа прекращает работу из-за ошибочной ситуации - "несоответствие типа", т.к. нужно было ещё внести значение диаметра провода. Произошла ошибочная ситуация в программе, когда поле txtD осталось незаполненым и произошло неправильное преобразование в числовую форму. Избежать это можно если занести в поля ввода нули. Начальные установки, которые бывают необходимы в программе удобно производить в момент инициализации формы, когда происходит событие UserForm_Initialize. Для данного события допишем следующий код:

Private Sub<> UserForm_Initialize()
txtR.Value = 0
txtD.Value = 0
End Sub

Теперь поговорим о навигации по нашей форме. В VBA есть возможность переходить от одного элемента управления к другому при помощи клавиши "TAB". Попробуем запустить программу и понажимать клавишу "TAB". Последовательность перехода следующая: поле ввода сопротивления-txtR,кнопка "расчёт"-cmdR и поле ввода диаметра провода-txtD. А удобнее было бы: поля ввода txtR,txtD и кнопка "расчёт"-cmdR. Порядок перехода задаётся в свойстве. Можно задать значение свойства для каждого элемента управления вручную в окне свойств, а можно это задать программно как это было сделано для свойства Value. Выбирем второй вариант. Тогда программный код для UserForm_Initialize() будет следующим:

Private Sub<> UserForm_Initialize()
txtR.Value = 0
txtD.Value = 0
txtR.TabIndex = 0
txtD.TabIndex = 1
cmdR.TabIndex = 2
End Sub
Теперь проверим работу нашей программы. Если сделано всё правильно, то вводить данные будет удобнее.(последовательность перехода должна измениться по второму варианту.)

2. Элемент управления "поле со списком".

 

Программа производит расчёт длины для медного провода. А если нужно произвести расчёт для провода из другого материала? Добавим ещё одно поле, как это было сделано для диаметра провода(См. пример "RRasch2.xls") и будем вводить коэффициент, учитывающий материал провода(удельное сопротивление), но это не очень удобно. Лучшим решением данной задачи будет применение элемента управления "Поле со списком"(ComboBox). Работа элемента управления в нашей программе поясню на рис.1:

<>Рис.1 Схема работы элемента управления: <>

1. инициализация:

В двух массивах kf(10) и nkf(10) организуем справочник удельного сопротивления материалов (нумерация элементов массивов начинается с 0).

2.Выбор материала:

Названия материала заносим из nkf(10) в список элемента "Поле со списком". При выборе материала из списка в свойство Value заносится индексный номер.

3.Установить значение коэффициента:
Значение коэффициента P берём из массива kf(10). Индекс элемента массива берем из свойства Value элемента "Поле со списком". И если "Поле со списком" назовём cmdMat, то коэффициенту P значение из массива будет присвоено так:

 

P=kf(cmdMat.Value)

И так продолжаемдоработку нашего проекта. Добавим на форму элемент "Поле со списком" идобавим пояснительную надпись, как показно на рис.2:

<>Рис.2 Добавление элемента "поле со списком". <>

Для данного элемента управления в окне "Свойства" установим значение Name = CmbMat.

В окне кодов добавим программный код (что добавлено выделено жирным шрифтом):

 

<>Dim <>R, D, P, S, L<> As Single

<>Dim<> kf(0 <>To <>9)<> As Single

<>Dim<> <>nkf(0 <>To <>9) <>As String

<>

 

<>Private Sub <>UserForm_Initialize()

nkf(0) = "Алюминий"

nkf(1) = "Вольфрам"

nkf(2) = "Латунь"

nkf(3) = "Константан"

nkf(4) = "Манганин"

nkf(5) = "Медь"

nkf(6) = "Никель"

nkf(7) = "Нихром"

nkf(8) = "Серебро"

nkf(9) = "Сталь"

<>

<> <>kf(0) = 0.026

<> <>kf(1) = 0.055

<> <>kf(2) = 0.07

<> <>kf(3) = 0.0049

<> <>kf(4) = 0.42

<> <>kf(5) = 0.0175

<> <>kf(6) = 0.07

<> <>kf(7) = 1.1

<> <>kf(8) = 0.016

<> <>kf(9) = 0.1

<> For I = 0 To 9 'Заполняем

<> cmbMat.AddItem nkf(I) 'список

<> Next I 'в элементе "поле со списком"

<> cmbMat.BoundColumn = 0

<> cmbMat.ListIndex = 5 ' Устанавливаем начальное

<> ' значение "Медь"

<> <>

txtR.Value = 0

txtD.Value = 0

txtR.TabIndex = 0

txtD.TabIndex = 1

cmdR.TabIndex = 2

<> End Sub

 

<>Private Sub <> cmbMat_Click()

P = kf(cmbMat.Value) <> <> <>'выбираем нужный коэф.

<> 'из массива

<> End Sub

 

<> И ещё. Нужно закомментировать строку P=0.0175 в процедуре:

 

<>Private Sub<> cmdR_Click()

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

<>

D = TransD(txtD.Value)

<> 'P = 0.0175 ########### ЗАКОМЕНТИРУЕМ ОПРЕДЕЛЕНИЕ КОЭФ.

<>

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

<>

S = (3.1415926 * D ^ 2) / 4

L = S * R / P

<> '*****************

<>

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

<>End Sub

<>

 

Готовый пример модернизации:<>../Primer3.rar

<>


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

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






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