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. Чтобы понять, для чего это сделано, выполните следующие действия.
Вернитесь на рабочий лист с вычислениями комиссионных. Отметьте, что сейчас величина комиссионных составляет 0.05.
Введите нет (все буквы строчные) в ячейку В2.
Щелкните на кнопке Вычисление комиссионных. Какой размер комиссионных получили? 0,01. Почему?
Вернитесь в редактор 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
Вернитесь на рабочий лист и щелкните на кнопке Вычисление комиссионных. Процедура должна дать правильный результат.
Функция VBA UCase преобразует все символы текстового аргумента в верхний регистр. Благодаря этой функции операторы If перестали быть чувствительны к регистру вводимых данных. (В русской версии Excel (но не в VBA!) эта функция называется ПРОПИСН. - Прим. ред.)