VBA для чайников
Шрифт:
If условие Then
( операторы, выполняющиеся, когда условие = True)
End If
Простой пример использования оператора If. . .Then можно найти выше в разделе "Анатомия управляющих структур" этой главы.
Обратите внимание на следующие моменты, касающиеся операторов If... Then.
* Здесь условие должно быть условным выражением типа описанных выше в разделе "Курс на использование условных выражений". Если условие принимает значение True, то VBA выполнит операторы, размешенные между If. . .Then и End If.
* Обратите внимание, ключевое слово Then размещается
* Не забывайте печатать завершающий оператор End If, При его отсутствии VBA не поймет, какой оператор должен быть последним в блоке.
Однострочные операторы If...Then
Если структура If. . .Then должна выполнить только один оператор, когда условие принимает значение True, всю эту структуру можно уместить в одну строку. В таком случае оператор End If не требуется - точнее, его быть не должно. Оператор
If curЦена > 20 Then MsgBox "Цена слишком высока!"
в результате идентичен структуре
If curЦена > 20 Then
MsgBox "Цена слишком высока!"
End If
Если нужно, чтобы на основании одного условия программа выбирала между двумя альтернативными блоками программного кода, используйте оператор If. . .Then. . .Else.
В том случае, если условие принимает значение True, то выполняется один блок программного кода, а если условие принимает значение False, то выполняется другой. Вот формальный синтаксис этого оператора:
If условие Then
( операторы, выполняющиеся, когда условие = True)
Else
(операторы, выполняющиеся, когда условие = False)
End If
Если условие имеет значение True, VBA выполняет первый блок операторов и, пропустив все остальные операторы структуры, переходит к строке программного кода, следующей сразу за оператором End If. А если условие имеет значение False, то выполняются только операторы, следующие за оператором Else.
В следующем примере выражение условие проверяет, является ли элемент управления в форме кнопкой. При положительном результате фон кнопки закрашивается красным цветом, все другие элементы управления - голубым:
If TypeOf ctlCurrentControl Is CommandButton Then
ctlCurrentControl.BackColor = &HFF& ' красный
Else
ctlCurrentControl.BackColor = &HFFFF00& ' голубой
End If
В этом примере предполагается, что переменная ctlCurrentControl уже содержит ссылку на соответствующий объект в форме. Ключевое слово TypeOf позволяет проверить, является ли объект, на который ссылается переменная, объектом нужного типа - в данном случае объектом CommandButton.
Использование операторов If...Then
Часто, прежде чем принять решение о действиях, которые должна
В зависимости от ситуации, при этом потребуется добавить в структуру If. . .Then ключевые слова ElseIf или вложенные структуры If . . .Then.
Используйте ключевое слово ElseIf, чтобы проверить дополнительное условие, если вы хотите выполнять определенные операторы только в случае, когда первое условие не принимает значение True. Ниже представлен синтаксис такой структуры:
If условие! Then
(операторы, выполняющиеся, когда условие! = True)
ElseIf условие2 Then
(операторы, выполняющиеся, когда условие! = False, а условие2 = True)
ElseIf условиеЗ Then
(операторы, выполняющиеся, когда условие! и условие2 = False, а условиеЗ = True)
(другие операторы ElseIf )
Else ' необязательное ключевое слово
(операторы, выполняющиеся, когда все условия = False)
End If
При этом ключевое слово ElseIf в структуре может повторяться любое число раз.
Ключевое слово Else необязательно, но если оно присутствует, то должно быть в структуре последним.
Чтобы заставить работать этого монстра, представьте себе, что программа помогает вам вести учет в магазине по продаже фотоматериалов. Пленку, срок хранения которой истек, следует списывать и не учитывать в дальнейшем. Если же пленка еще не просрочена, ее нужно учесть в общем количестве пленок соответствующего типа.
Это делается в следующем фрагменте программного кода. Предполагается наличие объекта, представляющего ролик с пленкой, и наличие у этого объекта свойств для даты истечения срока хранения, типа пленки и признака цветности (как альтернативы черно-белого варианта).
If objRollOfFilm.ExpDate < Date Then
MsgBox " Эта пленка не годится."
ElseIf objRollOfFilm.Type = "Слайдовая" Then
intСлайдовые = intСлайдовые + 1
ElseIf objRollOfFilm.Color Then
intЦветныеНегативные = intЦветныеНегативные + 1
Else intЧБНегативные = intЧБНегативные + 1
End If
Первый оператор сравнивает значение свойства ExpDate (срок хранения) с текущей датой.
Если дата окончания срока хранения уже прошла, программа отображает окно сообщения с соответствующей информацией, и это все. Только если пленка все еще годится (т.е. если первое условие принимает значение False), будет выполнен первый из операторов ElseIf. Этот оператор проверяет свойство Туре (тип) объекта, представляющего пленку. Если значением свойства является "Слайдовая", то следующий оператор увеличивает счетчик слайдовых пленок.