litbaza книги онлайнРазная литератураИнтернет-журнал "Домашняя лаборатория", 2007 №7 - Глуховский

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 279 280 281 282 283 284 285 286 287 ... 511
Перейти на страницу:
для проверки того, является ли та или иная строка записью числа — IsNumeric Можно, например, найти ее описание в разделе "Поиск" Справочной системы по VBA из Microsoft Office 97 по словам "строковое выражение числовое значение" — рис. 6.7.

Рис. 6.7. Справка по функции IsNumeric в Microsoft Office 97.

(В Microsoft Office 2000/ХР информацию об этой функции так просто не получить, однако можно попробовать задать вопрос Мастеру ответов, например, так: "Does the expression a number?" — "Является ли это выражение числом?" В этом случае в перечне результатов поиска будет и справка по функции IsNumeric (рис. 6.8).

Рис. 6.8. Справка по функции IsNumeric в Microsoft Office ХР.

Однако найти ее, не зная имени функции, все же непросто — при другой формулировке запроса эта информация может вообще не быть выведена даже в перечне результатов поиска.)

Ее (функцию IsNumeric) и используем. Ну, а для проверки отличия от нуля значений в последних двух полях ввода используем функцию "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)

Функция Str делает преобразование, обратное тому, что производит Val — конвертирует числовое значение выражения в строковое, что позволяет этому значению в дальнейшем обрабатываться как строке.

(Функции Val и Str нужны "для самого VBA" — они, не производя никакого видимого действия, преобразуют ни что иное, как типы данных обрабатываемых ими переменных, — соответственно из строкового в числовой и из числового в строковый. Подробнее о типах данных — в четвертой главе.)

Теперь можно написать процедуру вычисления результата и вызовы ее из всех обработчиков событий "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 + " кв. мм и удельным сопротивлением " + ТехtBox5. Text + " ом на метр за " + TextBox2. Text + " секунд выделится" + TextBox6. Text + " джоулей теплоты. "

Она сформирует фразу из значений полей ввода и вставит ее в активный документ. Проверим… так, действительно вставляет, но фраза остается выделенной. А значит, что следующая фраза, выведенная с помощью нашей программы, сотрет предыдущую. Надо посмотреть, нет ли в Visual Basic for Applications функции снятия выделения? Посмотрим по выпадающему меню после точки "Selection."… есть команда "Collapse" (то есть "Свернуть") — рис. 6.9.

Рис. 6.9. Список методов объекта Selection.

Из справки по ней (рис. 6.10) узнаем ее синтаксис:

Selection.Collapse Direction:=wdCollapseEnd.

Рис. 6.10. Справка по команде Collapse.

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

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

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

If Documents.Count = 0 Then Documents.Add

Осталась еще одна маленькая деталь. Кнопка "Вставить результат в документ" не должна работать, если результат вычислить нельзя (то есть поле "TextBox6" пусто). Как это сделать? Среди всего набора возможных свойств элемента "CommandButton" есть свойство "Enabled" (рис. 6.11) — если его установить как "False" (то есть "ложно"), то кнопка будет отображаться серым цветом и не будет реагировать на события (станет неактивной).

Рис. 6.11. Свойство Enabled элемента CommandButton.

Это свойство можно задать и программно — командой "CommandButton1.Enabled = False". Поставим в процедуру вычисления результата пару команд, активизирующих кнопку, когда результат вычисляется и вставка его в текст возможна, и инактивирующих ее в противном случае, а также зададим с самого начала в форме свойство "Enabled" этой кнопки как "False", — чтобы она была неактивной с самого начала, до того, как в какое-либо окно ввода будут вводиться символы и начнет срабатывать процедура вычисления результата с командами задания состояния кнопки.

Вот готовый код нашей программы:

Private Sub CommandButtonl_Click ()

If Documents.Count = 0 Then Documents.Add

Selection. Text = "При прохождении тока напряжением

1 ... 279 280 281 282 283 284 285 286 287 ... 511
Перейти на страницу:

Комментарии
Минимальная длина комментария - 20 знаков. Уважайте себя и других!
Комментариев еще нет. Хотите быть первым?