представляется нецелесообразным, поэтому лучше проверку возможности отображения результата и его подсчет вынести в отдельную подпрограмму-процедуру, а из каждого обработчика события «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.

Эта команда убирает выделение и помещает курсор в его конец.

Можно также вставить текст в активный документ 'Selection.TypeText Text:='Мой текст' (двоеточие после слова «Text» обязательно, так как это — оператор присваивания значения параметру команды). Тогда в команде специального снятия выделения со вставленного текста не будет необходимости, — после выполнения команды выделенного текста не окажется.

Но что произойдет, если пользователь вдруг вызовет программу тогда, когда открытых документов в Word'е нет? Тогда ведь возникнет ошибка программы. Но этого легко избежать — надо просто проверить перед вставкой, есть ли открытые документы и, если нет, создать новый:

If Documents.Count = 0 Then Documents.Add

Осталась еще одна маленькая деталь. Кнопка 'Вставить результат в документ' не должна работать, если результат вычислить нельзя (то есть поле «TextBox6» пусто). Как это сделать?

Среди всего набора возможных свойств элемента «CommandButton» есть свойство «Enabled» — если его установить как «False» (то есть 'ложно'), то кнопка будет отображаться серым цветом и не будет

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату