Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Макросы.doc
Скачиваний:
26
Добавлен:
21.11.2018
Размер:
16.91 Mб
Скачать

Оператор If

Первым условным оператором, который мы рассмотрим, будет оператор If... Then… Else (Если... Тогда... Иначе). Этот оператор имеет следующий синтаксис:

If условие_1 Then

[операторы_1]

[ElseIf условие_2 Then

[операторы_2]

[Else

[операторы]]

End If

В этом синтаксисе условие_1 - необходимая часть оператора. Это то основное условие, которое должно проверяться. Если значение этого условия ИСТИНА, выполняются операторы, записанные после слова Then.

Если вы хотите проверить второе условие в этом же операторе, добавьте еще одно выражение - ElseIf с последующим условием. VBA первым проверяет условие, записанное после слова If. Если это условие ложно, то проверяется второе условие, приведенное после слова ElseIf. Если это условие истинно, то выполняются операторы_2. В противном случае выполняются операторы, записанные после слова Else. Рассмотрим пример использования оператора If.

  1. Откройте новую рабочую книгу.

  2. Создайте таблицу, показанную на рис. 6.1.

Рис. 6.1. Рабочий лист, который послужит основой приложения

  1. В ячейку В6 введите формулу =В3+В4, вычисляющую общую сумму.

  2. Нажмите <Alt+F11> для открытия редактора Visual Basic.

  3. В окне проектов Project Explorer щелкните правой кнопкой мыши на элементе ЭтаКнига.

  4. В контекстном меню выберите команду Inserts > Module (Вставка > Модуль) для вставки модуля в рабочую книгу.

  5. Создайте новую процедуру и назовите ее Отправка.

  6. Введите следующий код процедуры:

Dim iResponse As Integer

iResponse = MsgВох (“Необходима для этого груза отправка?”, vbYesNo)

If iResponse = vbYes Then

 Range("B4").Value = 10

Else

 Range("B4").Value = 0

End If

  1. Перейдите в рабочую книгу.

  2. Вставьте командную кнопку в рабочий лист. Откроется диалоговое окно Назначить макрос объекту.

  3. В списке Имя макроса выберите пункт Отправка и щелкните на кнопке ОК. Сейчас вы назначили командной кнопке процедуру.

  4. Выделите текст на командной кнопке и нажмите клавишу <Delete> для его удаления. Введите текст Общая сумма - это новое название кнопки.

  5. Щелкните вне командной кнопки для снятия с нее выделения. В результате получим рабочий лист, подобный показанному на рис. 6.2.

  6. Введите число 120 в ячейку В3.

  7. Щелкните на кнопке Общая сумма. Отобразится окно сообщения (рис. 6.3).

  8. Щелкните на кнопке Да. В ячейке В4 появится число 10.

  9. Снова щелкните на кнопке Общая сумма.

  10. Теперь в окне сообщения щелкните на кнопке Нет. В ячейке В4 отобразится ноль.

Рис. 6.2. Законченный рабочий лист

Рис. 6.3. Щелкните на одной из кнопок в окне сообщения

Этот простой пример демонстрирует использование условного оператора. Прежде чем закончить с этим примером, задержите свое внимание на коде созданной процедуры (листинг 6.1).

Листинг 6.1. Процедура Отправка

1:Public Sub Shipping ()

2: Dim iResponse As Integer

3:

4: iResponse = MsgBox (“Необходима для этого груза отправка?”, vbYesNo)

5:

6: If IResponse = vbYes Then

7:  Range (“B4”).Value = 10

8: Else

9:  Range (“B4”).Value = 0

10: End If

11:

12:End Sub

Во второй строке процедуры объявляется переменная iResponse

Dim iResponse As Integer

Эта переменная используется для хранения значения, возвращаемого из окна сообщения:

iResponse = MsgBox(“Необходима для этого груза отправка?”, vbYesNo)

Возвращаемое окном сообщения значение генерируется кнопками Да и Нет. Значение переменной iResponse проверяется оператором If:

If iResponse = vbYes Then

 Range("B4").Value = 10

Else

 Range<"B4").Value = 0

End If

Если значение переменной iResponse равно vbYes, т.е. пользователь щелкнул на кнопке Да, то в ячейку В4 вводится число 10. В противном случае в ячейку В4 вводится ноль.

Можно создавать более сложные структуры с операторами If, вкладывая их один в другой. В следующем примере на размер начисляемых комиссионных влияют три фактора. Первый фактор - находится ли товар в продаже. Если товар находится в продаже, то все продавцы получают 1% комиссионных, если еще нет - 2%, Второй фактор - стаж работы продавца в фирме. Третий фактор - отдел, в котором работает продавец, например для продавцов отдела фурнитуры полагается дополнительно 1% комиссионных.

Когда один оператор находится внутри другого оператора, такая структура называется вложением операторов.

  1. Перейдите на новый рабочий лист в открытой рабочей книге.

  2. Создайте таблицу, как на рис. 6.4.

  3. Перейдите в редактор Visual Basic.

  4. Вставьте новую процедуру с именем Комиссионные.

Рис. 6.4. Рабочий лист, используемый для начисления комиссионных.

  1. Введите следующий код процедуры:

Dim sngCommission As Single

 If Range (“B2”) = “Нет” Then

  sngCommission = 0.02

  If Range(“В3”).Value >= 5 And Range(“B3”) <10 Then

   sngCommission = sngCommission + 0.01

  ElseIf Range(“B3”).Value >= 10 Then

   sngCommission = sngCommission + 0.02

  End If

  If Range (“B1”).Value = “Фурнитура” Then

   sngCommission = sngCommission + 0.01

  End If

 Else

  sngCommission = 0.01

 End If

 Range(“B5”).Value = sngCommission

  1. Перейдите на рабочий лист и вставьте командную кнопку. Назначьте процедуру Комиссионные.

  2. Замените текст на кнопке - назовите ее Вычисление комиссионных.

  3. Для снятия выделения с кнопки щелкните где-нибудь вне ее.

  4. Введите Фурнитура в ячейку В1. Удостоверьтесь, что текст введен правильно.

  5. Введите Нет в ячейку В2. Проверьте, чтобы текст был введен именно так, как здесь показано.

  6. Введите число 10 в ячейку В3.

  7. Щелкните на командной кнопке. В ячейке В5 должно появиться число 0,05, так как товар не в продаже, продавец работает в отделе фурнитуры и стаж его работы 10 лет - все условия максимальных комиссионных выполнены.

Полный код процедуры Комиссионные представлен в листинге 6.2.

Листинг 6.2. Процедура Комиссионные

1:Public Sub Комиссионные()

2: Dim sngCommission As Single

3:

4: If Range (“B2”) = “Нет” Then

5:  sngCommission = 0.02

6:

7:  If Range (“B3”).Value >= 5 And Range (“B3”) < 10 Then

8:   sngCommission = sngCommission + 0.01

9:  ElseIf Range (“B3”).Value >= 10 Then

10:   sngCommission = sngCommission + 0.02

11:  End If

12:

13:  If Range (“B1”).Value = “Фурнитура” Then

14:   sngCommission = sngCommission + 0.01

15:  End If

16:

17: Else

18:  sngCommission = 0.01

19: End If

20:

21: If Range (“B5”).Value = sngCommission

22:

23:End Sub

Как обычно, процедура начинается с объявления переменной, в данном случае - переменной sngCommission. Эта переменная используется для вычисления комиссионных. Первое условие - проверка, находится или нет товар в продаже:

If Range (“B2”) = “Нет” Then

 sngCommission = 0.02

Ячейка В2 содержит значение Да, если товар находится в продаже (комиссионные составляют 1%), и значение Нет - в противном случае (комиссионные составляют 2%):

Else

 sngCommission = 0.01

End If

Если товар не находится в продаже, то проверяются следующие условия:

If Range (“B3”).Value >= 5 And Range(“B3”) < 10 Then

 sngCommission = sngCommission + 0.01

ElseIf Range(“B3”) .Value >= 10 Then

 sngCommission = sngCommission + 0.02

End If

If Range (“B1”).Value = “Фурнитура” Then

 sngCommission = sngCommission + 0.01

End If

Здесь первый оператор If проверяет стаж работника. Второй оператор If определяет отдел, реализующий товар. Эти операторы вложены в первый оператор If процедуры.

В приведенных выше инструкциях по созданию процедуры специально указывалось, чтобы вы проверили, как введено слово Нет в ячейку В2. Чтобы понять, для чего это сделано, выполните следующие действия.

  1. Вернитесь на рабочий лист с вычислениями комиссионных. Отметьте, что сейчас величина комиссионных составляет 0.05.

  2. Введите нет (все буквы строчные) в ячейку В2.

  3. Щелкните на кнопке Вычисление комиссионных. Какой размер комиссионных получили? 0,01. Почему?

  4. Вернитесь в редактор Visual Basic и просмотрите код процедуры. Обратите внимание на выражение If Range (“B2”) = “Нет” в первом операторе If. Это выражение "чувствительно" к тому, в каком регистре введен текст в ячейке В2. Чтобы избавиться от этого недостатка, приведите код процедуры к следующему виду:

Public Sub Комиссионные()

 Dim sngCommission As Single

 If UCase(Range(“B2”)) = “НЕТ Then

  sngCommission = 0.02

  If Range(“B3”).Value >= 5 And Range (“B3”) < 10

   sngCommission = sngCommission + 0.01

  ElseIf Range(“B3”).Value >= 10 Then

   sngCommission = sngCommission + 0.02

  End If

  If UCase(Range(“B1”).Value) = "ФУРНИТУРА" Then

   sngCommission = sngCommission + 0.01

  End If

 Else

  sngCommission = 0.01

 End If

 If Range("B5").Value - sngCommission

End Sub

  1. Вернитесь на рабочий лист и щелкните на кнопке Вычисление комиссионных. Процедура должна дать правильный результат.

Функция VBA UCase преобразует все символы текстового аргумента в верхний регистр. Благодаря этой функции операторы If перестали быть чувствительны к регистру вводимых данных. (В русской версии Excel (но не в VBA!) эта функция называется ПРОПИСН. - Прим. ред.)