Инструкция If...Then...Else




Ввод и вывод информации

Для организации ввода и вывода информации в специальные окна сообщений, в VBA есть несколько специфических функций: InputBox и MsgBox.

Функция InputBox

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

Синтаксис:

 

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

 

Синтаксис функции InputBox содержит следующие именованные аргументы:

prompt - обязательный элемент. Строковое выражение, отображаемое как сообщение в диалоговом окне. Максимальная длина строки prompt составляет приблизительно 1024 символов и зависит от ширины используемых символов. Строковое значение prompt может содержать нескольких физических строк. Для разделения строк допускается использование символа возврата каретки (Chr(13)), символа перевода строки (Chr(10)) или комбинацию этих символов (Chr(13) & Chr(10));

title - необязательный элемент. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения;

default - необязательный элемент. Строковое выражение, отображаемое в поле ввода как используемое по умолчанию, если пользователь не введет другую строку. Если этот аргумент опущен, поле ввода изображается пустым;

xpos - необязательный элемент. Числовое выражение, задающее расстояние по горизонтали между левой границей диалогового окна и левым краем экрана (в твипах). Если этот аргумент опущен, диалоговое окно выравнивается по центру экрана по горизонтали;

ypos - необязательный элемент. Числовое выражение, задающее расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана (в твипах). Если этот аргумент опущен, диалоговое окно помещается по вертикали примерно на одну треть высоты экрана;

helpfile - необязательный элемент. Строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо указать также аргумент context;

context - необязательный элемент. Числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот аргумент указан, необходимо указать также аргумент helpfile.

 

Если указаны оба аргумента, helpfile и context, пользователь имеет возможность нажатием клавиши F1 вызвать контекстную справку. Некоторые главные приложения, например, Microsoft Excel также автоматически добавляют в диалоговое окно кнопку "Справка". Если пользователь нажимает кнопку "OK" или клавишу ENTER, функция InputBox возвращает содержимое поля ввода. Если пользователь нажимает кнопку "Отмена", функция возвратит пустую строку ("").

Функцию InputBox с двумя или большим числом аргументов можно использовать только в выражении. Наличие запятых, соответствующих отсутствующим аргументам, является обязательным.

В процедуре InB приведены различные способы получения сведений от пользователя с помощью функции InputBox. Если аргументы x и y опущены, окно диалога автоматически выравнивается по центру по соответствующим осям. Переменные I, Val содержит значения, введенное пользователем, если была нажата кнопка OK или клавиша ENTER. Если пользователь нажмет кнопку Отмена, функция возвратит пустую строку.

 

Sub InB()

 

Dim Message, Title, Default, Val

Dim I as Integer

I = InputBox("Введите число от 1 до 3”,”Пример”, 1)

' Сообщение-подсказка.

Message = "Введите число от 1 до 3"

' Заголовок.

Title = "Пример"

' Значение по умолчанию.

Default = "1"

' Выводит на экран сообщение, заголовок и значение по умолчанию.

Val = InputBox(Message, Title, Default)

' Получение справки. Кнопка "Справка" добавляется автоматически.

Val = InputBox(Message, Title,,,, "DEMO.HLP", 10)

' Размещает верхний левый угол окна диалога в точке 100, 100.

Val = InputBox(Message, Title, Default, 100, 100)

End sub

Функция MsgBox

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

Синтаксис

 

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

 

Синтаксис функции MsgBox содержит следующие именованные аргументы:

prompt - обязательный элемент. Строковое выражение, отображаемое как сообщение в диалоговом окне. Максимальная длина строки prompt составляет приблизительно 1024 символов и зависит от ширины используемых символов. Строковое значение prompt может содержать нескольких физических строк. Для разделения строк допускается использование символа возврата каретки (Chr(13)), символа перевода строки (Chr(10)) или комбинацию этих символов (Chr(13) & Chr(10));

buttons - необязательный. Числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию этого аргумента равняется 0;

title - необязательный элемент. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения..

helpfile - необязательный элемент. Строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо указать также аргумент context;

context - необязательный элемент. Числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот аргумент указан, необходимо указать также аргумент helpfile.

 

Смысл и значение параметров helpfile и context совпадает по смыслу с аналогичными параметрами функции InputBox.

В таблице 12 перечислены допустимые значения аргумента buttons.

Таблица 12

Допустимые значения аргумента buttons

Константа Значение Описание
vbOKOnly   Отображается только кнопка "OK".
VbOKCancel   Отображаются кнопки "OK" и "Отмена" (Cancel).
VbAbortRetryIgnore   Отображаются кнопки "Прервать" (Abort), "Повторить" (Retry) и "Пропустить" (Ignore).
VbYesNoCancel   Отображаются кнопки "Да" (Yes), "Нет" (No) и "Отмена" (Cancel).
VbYesNo   Отображаются кнопки "Да" (Yes) и "Нет" (No).
VbRetryCancel   Отображаются кнопки "Повторить" (Retry) и "Отмена" (Cancel).
VbCritical   Используется значок "Критическое сообщение".
VbQuestion   Используется значок "Предупреждающий запрос".
VbExclamation   Используется значок "Предупреждение".
VbInformation   Используется значок "Информационное сообщение".

 

Первая группа значений (0–5) указывает число и тип кнопок, отображаемых в окне диалога, вторая группа (16, 32, 48, 64) задает тип используемого значка. При определении значения аргумента buttons следует суммировать не более одного значения из каждой группы.

Данные константы определены в языке Visual Basic для приложений. Использование имен этих констант вместо их значений допускается в любом месте программы.

 

 

Таблица 13

Возвращаемые функцией значения

Константа Значение Нажатая кнопка
vbOK   OK
vbCancel   Отмена (Cancel)
vbAbort   Прервать (Abort)
vbRetry   Повторить (Retry)
vbIgnore   Пропустить (Ignore)
vbYes   Да (Yes)
vbNo   Нет (No)

 

Если указаны оба аргумента, helpfile и context, пользователь имеет возможность нажатием клавиши F1 вызвать контекстную справку. Некоторые главные приложения, например, Microsoft Excel, также автоматически добавляют в диалоговое окно кнопку "Справка".

Если окно диалога содержит кнопку "Отмена" (Cancel), нажатие клавиши ESC эквивалентно нажатию этой кнопки. Если окно диалога содержит кнопку "Справка" (Help), значит, существует связанный с ним раздел справочной системы. Однако никакое значение не возвращается до тех пор, пока не будет нажата какая-либо другая кнопка.

MsgBox с двумя или большим числом аргументов можно использовать только в выражении. Наличие запятых, соответствующих отсутствующим аргументам, является обязательным.

Пример 8

Sub окно()

Dim a as integer

MsgBox ("Пример вывода текста")

a = InputBox("Введите целое число!")

MsgBox ("Ваше число=" & a)

con= vbYesNo

res=MsgBox ("Вы согласны, что ” & a & “ это ваше число?",, _

”hello my friend!”)

res = MsgBox("Вы согласны, что " & a & " это ваше число?", con, _

"hello my friend!")

end Sub

 

 

Пример 9

В данном примере функция MsgBox используется для вывода окна диалога с сообщением об ошибке и кнопками "Да" (Yes) и "Нет" (No). Основной является кнопка "Нет" (No). Значение, возвращаемое функцией MsgBox, зависит от того, какая кнопка была нажата пользователем. Предположим, что DEMO.HLP является файлом справки, содержащим раздел с номером, равным 1000.

 

Sub окно2()

Dim Msg, Title, Response, Message, Default, MyValue

' Сообщение.

Msg = "Обнаружена ошибка. Продолжить?"

' Заголовок

Title = "Пример"

' Выводит сообщение

Response = MsgBox(Msg, vbYesNoCancel, Title)

If Response = vbYes Then

' Нажата кнопка "Да" (Yes).

MsgBox ("нажата кнопка ДА")

' Нажата кнопка "Нет" (No)

Else

MsgBox ("нажата кнопка НЕТ")

End If

End Sub

Пример 10

Данная процедура демонстрирует использование аргумента Button функции MsgBox.

 

Sub окно3()

Dim Title, Response, Message

' Заголовок

Title = "Демонстрация кнопок MsgBox"

' Выводит сообщение

Response = MsgBox(prompt:="Выберите кнопку", _

Title:=Title, _

Buttons:=vbYesNoCancel + vbQuestion)

Select Case Response

' Нажата кнопка "Да" (Yes).

Case Is = vbYes

MsgBox prompt:="Нажата кнопка ДА", _

Title:=Title, _

Buttons:=vbInformation

' Нажата кнопка "Нет"

Case Is = vbNo

MsgBox prompt:="Нажата кнопка НЕТ", _

Title:=Title, _

Buttons:=vbExclamation

' Нажата кнопка "ОТМЕНА"

Case Is = vbCancel

MsgBox prompt:="Нажата кнопка ОТМЕНА", _

Title:=Title, _

Buttons:=vbCritical

End Select

End Sub

Организация ветвлений

Инструкция If...Then...Else

Инструкция If...Then...Else выполняет определенные инструкции или наборы инструкций в зависимости от значения условия. Допускаются многократно вложенные инструкции If...Then...Else, имеющие столько уровней вложения, сколько потребуется.

Эта инструкция задает выполнение определенных групп инструкций в зависимости от значения выражения.

 

Синтаксис:

 

If условие Then [инструкции] [Else инструкции_else]

 

Условие - это выражение логического типа. Результат вычисления условия всегда имеет булевский тип. Выражение может быть простым и сложным. При записи условий могут использоваться все возможные операции отношения.

Допускается также использование блоковой формы синтаксиса:

 

If условие Then

Блок_ инструкций

Else

Блок_ инструкций _ Else

End If

 

или же:

 

If условие_1 Then

Блок_инструкций_1

ElseIf условие_2 Then

Блок_ инструкций _2

elseif условие_3 Then

Else

блок_ инструкций_ Else

End If

 

Ветвь Else является необязательной.

Простую однострочную форму рекомендуется использовать для коротких, простых проверок. Однако блочная форма обеспечивает более структурированный подход и большую гибкость по сравнению с однострочной формой. Блочная форма обычно проще для чтения, обработки и отладки.

Однострочная форма допускает выполнение нескольких инструкций в результате проверки одного условия If...Then, но все инструкции должны находиться на одной строке и разделяться двоеточием, как в следующем примере:

 

If A > 10 Then A = A + 1: B = B + A: C = C + B

 

Если при такой форме записи оператора необходимо продолжить его на следующей строке, следует использовать символ подчеркивания «_» в конце каждой строки.

В блоковой форме инструкция If должна быть первой инструкцией в строке. Компоненты Else, ElseIf и End If могут иметь перед собой только номер строки или ее метку. Блок If должен заканчиваться инструкцией End If.

Для того, чтобы определить, представляет инструкция блок If или нет, проверяется элемент, следующий за ключевым словом Then. Если после Then на той же строке стоит любой элемент, не являющийся комментарием, эта инструкция рассматривается как однострочная инструкция If.

Оба предложения Else и ElseIf являются необязательными. В блоке If допускается любое число предложений ElseIf, но ни одно такое предложение не может появляться после предложения Else. Допускаются вложенные блоки инструкций If, то есть блоки If, содержащиеся в других блоках.

При выполнении блока If (вторая форма синтаксиса), проверяется условие. Если условие имеет значение True, выполняются инструкции, следующие за Then. Если условие имеет значение False, то по очереди оценивается каждое условие ElseIf (если такие имеются). При обнаружении условия со значением True выполняются инструкции, непосредственно следующие за соответствующим предложением Then. Если ни одно из условий ElseIf не имеет значение True (или предложения ElseIf отсутствуют), выполняются инструкции, следующие за Else. После выполнения инструкций, следующих за Then или Else, выполнение продолжается с инструкции, следующей за End If.

Пример 1

Следующая процедура присваивает значение текущей даты переменной myDate, если начальное значение myDate меньше значения текущей даты. Для выполнения только одной инструкции, когда условие имеет значение True, используется однострочный синтаксис инструкции If...Then...Else. Ветвь Else отсутствует.

 

 

Sub FixDate()

myDate = #2/13/95#

If myDate < Now Then myDate = Now

End Sub

 

Пример 2

Функция Премия вычисляет размер премии на основе оценки проделанной работы.

 

Балл Размер премии
  10%
  9%
  7%
в остальных случаях 0%

 

Здесь используется блочная форма синтаксиса инструкции If...Then...Else. Инструкция, следующая за Else, выполняется, если условия во всех инструкциях If и ElseIf имеют значения False.

 

Function Премия (Балл, оклад)

If Балл= 1 Then

Премия= оклад* 0.1

ElseIf Балл= 2 Then

Премия= оклад* 0.09

ElseIf Балл= 3 Then

Премия= оклад* 0.07

Else

Премия= 0

End If

End Function

 

 

Пример 3

В данном примере используется простая однострочная форма условного оператора. Используется символ подчеркивания для продолжения оператора на следующей строке.

 

Function FUNNY(X)

 

If X < 0.2 Then FUNNY = 1 + X*(1 + X) _

Else: If X <= 0.8 Then FUNNY = (1 + X ^ (1 / 2)) / (1 + X) _

Else FUNNY = 2 * Exp((-2) * X)

End Function

 

Пример 4

 

В этом примере также применяется простая однострочная форма условного оператора. Используется символ подчеркивания для продолжения оператора на следующей строке.

 

Function G(y)

If y <= 0 Then G = (1 + y ^ 2) / (1 + y ^ 4) ^ (1 / 2) _

Else G = 2 * y + Sin(y) ^ 2 / (2 + y)

End Function

Инструкция Select Case

Для облегчения чтения программы вместо многократно вложенных инструкций If...Then...Else иногда предпочтительнее использовать инструкцию Select Case.

Инструкция Select Case выполняет одну из нескольких групп инструкций в зависимости от значения выражения.

Синтаксис:

 

Select Case выражение

 

[Case списокВыражений -n

[ инструкции -n]]...

 

[Case Else

[ инструкции _else]]

End Select

 

Синтаксис инструкции Select Case содержит следующие элементы:

выражение - обязательный элемент. Любое числовое выражение или строковое выражение;

списокВыражений -n - обязательный элемент при наличии предложения Case. Список с разделителями, состоящий из одной или нескольких форм следующего вида: выражение, выражение To выражение, Is оператор_Сравнения выражение. Ключевое слово To задает диапазон значений. При использовании ключевого слова To перед ним должно находиться меньшее значение. Ключевое слово Is с операторами сравнения (кроме Is и Like) задает диапазон значений. Если ключевое слово Is не указано, оно вставляется по умолчанию;

инструкции -n - необязательный элемент. Одна или несколько инструкций, выполняемых в том случае, если выражение совпадает с любым компонентом списка списокВыражений-n;

инструкции_else - необязательный элемент. Одна или несколько инструкций, выполняемых в том случае, если выражение не совпадает ни с одним из предложений Case.

 

Алгоритм работы оператора: если выражение совпадает с любым выражением из спискаВыражений в предложении Case, выполняются все инструкции, следующие за данным предложением Case до следующего предложения Case, или, для последнего предложения, до инструкции End Select. Затем управление передается инструкции, следующей за End Select. Если выражение совпадает с выражениями из списка в нескольких предложениях Case, выполняется только первый подходящий набор инструкций.

Предложение Case Else задает список инструкции_else, которые будут выполнены, если не обнаружено ни одно совпадение выражения и компонента списокВыражений ни в одном из остальных предложений Case. Данное предложение не является обязательным, однако, рекомендуется помещать предложение Case Else в блок Select Case, чтобы предусмотреть неожиданные значения выражения. Если ни в одном предложении Case списокВыражений не содержит компонента, отвечающего аргументу выражения, и отсутствует инструкция Case Else, выполнение продолжается с инструкции, следующей за инструкцией End Select.

В каждом предложении Case допускается использование нескольких выражений или диапазонов. Например, допустима следующая строка:

 

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

 

Имеется также возможность задать диапазоны или несколько выражений для строковых значений.

В следующем примере предложение Case выполняется для строк, которые точно совпадают со строкой "все ", для строк, лежащих в алфавитном порядке между "орехи" и "яблоки", и для строк со значением, равных текущему значению переменной TestItem:

 

Case "все", "орехи" To "яблоки", TestItem

 

Инструкция Select Case может служить альтернативой инструкции ElseIf в If...Then...Else при оценке одного выражения, которое имеет несколько возможных значений. В то время, как If...Then...Else для каждой инструкции ElseIf оценивает разные выражения, инструкция Select Case оценивает выражение только один раз, в начале управляющей структуры.

Пример 5

В данном примере Select Case оценивает значение аргумента Балл. Размер премии вычисляется в соответствии со следующей схемой:

 

Балл Размер премии
  10%
2,3 9%
от 4 до 8 7%
более 8 10 грн

 

Function Премия _1(Балл, оклад)

Select Case Балл

Case 1

Премия= оклад* 0.1

Case 2, 3

Премия= оклад* 0.09

Case 4 To 8

Премия= оклад* 0.07

Case Is > 8

Премия= 10

Case Else

Премия= 0

End Select

 

Премия _1=Премия

 

End Function

 

Те же действия можно реализовать, используя условный оператор If..Then…Else.

 

Function Премия _2(Балл, оклад)

If Балл= 1 Then

Премия= оклад* 0.1

ElseIf Балл= 2 or Балл= 3 Then

Премия= оклад* 0.09

ElseIf Балл>=4 and Балл<= 8 Then

Премия= оклад* 0.07

ElseIf Балл>8 Then

Премия= 10

Else

Премия= 0

End If

 

Премия_2=Премия

End Function

Пример 6

Функция, возвращающая одну из трех текстовых строк в зависимости от заданного аргумента. Если значение Val отрицательно переменной NumSign присваивается текстовое значение «минус», в случае нулевого значения – текст «нуль», если же Val положительное, то NumSign присваивается значение «плюс»

 

Function NumSign(Val)

Select Case Val

Case Is<0

NumSign =”минус”

Case 0

NumSign = “нуль”

Case Is > 0

NumSign = “плюс”

End Select

End Function

Пример 7

Функция, вычисляющая комиссионные, начисляющиеся по следующему правилу:

· если продукции продано не меньше, чем на 1 000 грн, то комиссионные составляют 2% от стоимости реализованной продукции;

· если продукции продано меньше, чем на 1 000 грн, то комиссионные составляют 1% от стоимости реализованной продукции;

· если стаж работы в фирме не меньше 5 лет, то выплачивается доплата в размере 0,5% от стоимости реализованной продукции.

Первый способ составления функции.

 

Function Премия_3(стаж, продажа)

If стаж >= 5 And продажа >= 1000000 Then Премия_3 = 0.025 * продажа

If стаж < 5 And продажа >= 1000000 Then Премия_3 = 0.02 * продажа

If стаж >= 5 And продажа < 1000000 Then Премия_3 = 0.015 * продажа

If стаж < 5 And продажа < 1000000 Then Премия_3 = 0.01 * продажа

End Function

 

Второй способ составления функции.

 

Function Премия_4(стаж, продажа)

Dim Age, All_s As Integer

If стаж >= 5 Then Age = 0.005 * продажа

If продажа >= 1000000 Then

All_s = 0.02 * продажа

Else

All_s = 0.001 * продажа

End If

Премия_4 = Age + All_s

End Function

 

Третий способ составления функции.

 

Function Премия_5(стаж, продажа)

Dim Age, All_s As Integer

If стаж >= 5 Then Age = 0.005 * продажа

If продажа >= 1000000 Then All_s = 0.02 * продажа _

Else All_s = 0.001 * продажа

Премия_5 = Age + All_s

End Function

 

Циклы в программе

Для повторения некоторых однотипных действий в программах используются специальные инструкции, называемые инструкциями цикла. Таким образом, можно сказать, что циклы используются для повторения блоков программы.

Использование циклов дает возможность повторного выполнения набора инструкций. Некоторые циклы повторяют инструкции пока условие имеет значение False; другие - пока значение условия равно True. Имеются также циклы, которые повторяют набор инструкций определенное число раз или же выполняют его для каждого объекта семейства.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-05-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: