"Change" — это по-английски "изменение". Код, написанный в этой части программы (часть эта называется "обработчик события "Change"), должен выполняться всякий раз при происхождении этого события. Можно предположить, что это событие происходит тогда, когда в поле ввода ввели какой-либо символ или удалили его оттуда. В этом случае это — именно то событие, которое нам надо. Но то ли? Проверим. Напишем-ка Здесь строчку:
Private Sub TextBox1_Change
TextBox6.Text=TextBox1.Text
End Sub
Пусть для эксперимента при изменении текста в первом поле ввода произойдет изменение текста в поле отображения результата. Проверим, будет ли это работать, — нажмем F5 (запуск программы на выполнение) и введем текст в первое поле ввода.
Прекрасно — в поле отображения результата появляется тот же текст! Значит, событие "Change" — именно то, которое нам надо использовать в нашей программе, чтобы после каждого нового ввода данных пользователем проверять условия возможности отображения результата и отображать его в случае их выполнения.
Ну, а если бы оно нам не подошло, то пришлось бы перебирать все остальные события из выпадающего списка вверху справа окна программного кода формы (см. на рис. 4.3) и для каждого проводить такое же исследование: помещать в обработчик этого события команду, выполняющую какое-либо действие и смотреть, будет ли она выполнена при вводе текста в первое поле ввода.
Проверка возможности подсчета результата и вывод его в случае соблюдения описанных выше условий должна происходить после каждого ввода какого-либо символа в любое из окон ввода, а также при удалении символа из любого окна ввода. Писать пять одинаковых программ для каждого из окон ввода представляется нецелесообразным, поэтому лучше проверку возможности отображения результата и его подсчет вынести в отдельную подпрограмму-процедуру, а из каждого обработчика события "Change" полей ввода ее вызывать.
Переведем на язык VBA условие возможности отображения результата. Во-первых, все значения полей ввода должны быть числовыми. В VBA есть специальная функция для проверки того, является ли та или иная строка записью числа — IsNumeric (можно, например, найти ее описание в разделе "Поиск" справки по VBA из Microsoft Office 97 по словам "строковое выражение числовое значение", а в справке VBA из более старших версий этого пакета — по английским эквивалентам данных слов). Ее и используем. Ну, а для проверки отличия от нуля значений в последних двух полях ввода используем функцию "Val". Итак, результат существует, если
IsNumeric(TextBox1.Text) = True And IsNumeric(TextBox2.Text) = True And IsNumeric(TextBox3.Text) = True And IsNumeric(TextBox4.Text) = True And IsNumeric (TextBox5. Text) = True And Not Val(TextBox4.Text) = 0 And Not Val(TextBox5.Text) = 0
В этом случае можно осуществить подсчет по формуле Джоуля-Ленца:
rez = ((Val(TextBox1.Text)^2) * Val(TextBox2.Text) * Val(TextBox3.Text))/(Val(TextBox4.Text) * Val(TextBox5.Text))
и отобразить его в поле вывода результата:
TextBox6.Text = Str$(rez)
Теперь можно написать процедуру вычисления результата и вызовы ее из всех обработчиков событий "Change":
Private Sub TextBox1_Change
Scet
End Sub
Private Sub TextBox2 Change
Scet
End Sub
Private Sub TextBox3_Change
Scet
End Sub
Private Sub TextBox4_Change
Scet
End Sub
Private Sub TextBox5_Change
Scet
End Sub
Private Sub Scet
If IsNumeric(TextBox1.Text) = True And IsNumeric(TextBox2.Text) = True And IsNumeric(TextBox3.Text) = True And IsNumeric(TextBox4.Text) = True And IsNumeric (TextBox5. Text) = True And Not Val(TextBox4.Text) = 0 And Not Val(TextBox5.Text) = 0 Then
rez = ((Val(TextBox1.Text)^2) * Val(TextBox2.Text) * Val(TextBox3.Text)) / (Val(TextBox4.Text) * Val(TextBox5.Text))
TextBox6.Text = Str$(rez)
Else
TextBox6.Text = ""
End If
End Sub
В принципе программа уже почти закончена, но стоит еще разобраться с командными кнопками. Для кнопки "Отмена" обработчик события "Click" (то есть нажатия на кнопку) прост — выход из программы:
Private Sub CommandButton2_Click
Unload Me
End Sub
Но у нас есть еще вторая кнопка — "Вставить результат в документ". А пусть она вставит в документ не просто значение результата, а осмысленную фразу, содержащую как результат, так и введенные параметры! Это можно сделать командой
Selection.Text = "При прохождении тока напряжением в " + TextBox1.Text + " вольт по проводнику длиной " + TextBox4.Text + " метров, сечением " + TextBox3.Text + " кв. мм и удельным сопротивлением " + TextBox5.Text + " ом на метр за " + TextBox2.Text + " секунд выделится" + TextBox6.Text + " джоулей теплоты. "
Она сформирует фразу из значений полей ввода и вставит ее в активный документ. Проверим… так, действительно вставляет, но фраза остается выделенной. А значит, что следующая фраза, выведенная с помощью нашей программы, сотрет предыдущую. Надо посмотреть, нет ли в VBA функции снятия выделения? Посмотрим по выпадающему меню после точки "Selection."… есть команда "Collapse" (то есть "Свернуть"). Из справки по ней узнаем ее синтаксис:
Selection.Collapse Direction:=wdCollapseEnd.