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 + " кв. мм и удельным сопротивлением " + ТехtBox5. Text + " ом на метр за " + TextBox2. Text + " секунд выделится" + TextBox6. Text + " джоулей теплоты. "
Она сформирует фразу из значений полей ввода и вставит ее в активный документ. Проверим… так, действительно вставляет, но фраза остается выделенной. А значит, что следующая фраза, выведенная с помощью нашей программы, сотрет предыдущую. Надо посмотреть, нет ли в Visual Basic for Applications функции снятия выделения? Посмотрим по выпадающему меню после точки "Selection."… есть команда "Collapse" (то есть "Свернуть") — рис. 6.9.
Рис. 6.9.
Из справки по ней (рис. 6.10) узнаем ее синтаксис:
Рис. 6.10.
Эта команда убирает выделение и помещает курсор в его конец.
Можно также вставить текст в активный документ "Selection.TypeText Техt="Мой текст" (двоеточие после слова "Text" обязательно). Тогда в специальном снятии выделения со вставленного текста не будет необходимости, — оно будет автоматически сворачиваться к своему концу.
А если вдруг пользователь вызовет программу тогда, когда открытых документов в Word'e нет? Тогда ведь возникнет ошибка программы. Но этого легко избежать — надо просто проверить перед вставкой, есть ли открытые документы и, если нет, создать новый:
Осталась еще одна маленькая деталь. Кнопка "Вставить результат в документ" не должна работать, если результат вычислить нельзя (то есть поле "TextBox6" пусто). Как это сделать? Среди всего набора возможных свойств элемента "CommandButton" есть свойство "Enabled" (рис. 6.11) — если его установить как "False" (то есть "ложно"), то кнопка будет отображаться серым цветом и не будет реагировать на события (станет неактивной).
Рис. 6.11.
Это свойство можно задать и программно — командой "CommandButton1.Enabled = False". Поставим в процедуру вычисления результата пару команд, активизирующих кнопку, когда результат вычисляется и вставка его в текст возможна, и инактивирующих ее в противном случае, а также зададим с самого начала в форме свойство "Enabled" этой кнопки как "False", — чтобы она была неактивной с самого начала, до того, как в какое-либо окно ввода будут вводиться символы и начнет срабатывать процедура вычисления результата с командами задания состояния кнопки.
Вот готовый код нашей программы:
Private Sub CommandButtonl_Click
If Documents.Count = 0 Then Documents.Add
Selection. Text = "При прохождении тока напряжением в " + TextBox1. Text + " вольт по проводнику длиной " + TextBox4. Text + " метров, сечением " + TextBox3. Text + " кв. мм и удельным сопротивлением " + ТехtBox5. Text + " ом на метр за " + TextBox2. Text + " секунд выделится" + TextBox6. Text + " джоулей теплоты. "
Selection.Collapse Direction:=wdCollapseEnd
End Sub
Private Sub CommandButton2_Click
Unload Me End Sub
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)
CommandButtonl.Enabled = True Else
TextBox6. Text = " "
CommandButton1.Enabled = False
End If
End Sub
Назначить форме кнопку или пункт меню для вызова из Word нельзя, — это возможно только для модулей. Поэтому переименуем для красоты форму в "Teplotok", например (свойство "Name" объекта "UserForm" — можно задать в окне свойств, выделив форму) и напишем модуль, в котором будет всего одна команда — вызов созданной нами формы:
Sub TeploCount
Teplotok.Show
End Sub