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

Пример: Если скидка 5 % применяется только к суммам больше 1000, то в VBA это запишется следующим образом:

If Сумма > 1000 Then Скидка = 0.05

При блочной структуре:

If Сумма > 1000 Then

Скидка = 0.05

Else

Скидка = 0 End If

Если дерево условий более сложное, используется оператор If – Then – ElseIf, позволяющий проверять множественные условия.

If Условие1 Then

Инструкции1] ElseIf Условие2 Then

[Инструкции2]

[Else

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

End if]

Первым проверяется Условие1. Если оно имеет значение True, то выполняются Инструкции1, и выполнение программы продолжается со строки, следующей за ключевым словом End If. В противном случае проверяется Условие2, и т.д., пока не встретится либо условие, имеющее значение True, либо ключевое слово Else.

Пример. В зависимости от вводимого числа выдается сообщение о принадлежности числа:

Либо интервалу [0, 1]

Либо интервалу (1, 2]

Либо о не принадлежности числа этим двум интер-

валам

X = InputBox(“Введите число”)

If (0<=x) and (x<=1) then

MsgBox “Число из интервала [0, 1]”

ElseIf (1<x) And (x<=2) Then

21

MsgBox “Число из интервала (1, 2]”

Else

MsgBox “Число либо отрицательное, либо больше 2]”

End If

Оператор выбора. Если нужно проверить несколько условий, то оператор If – Then может стать слишком сложным. В этом случае применяется оператор выбора, он выполняет одну из нескольких групп инструкций, в зависимости от значения выражения.

Синтаксис:

Select Case Выражение

[Case СписокВыражений-1 [Инструкции-1]]

[Case

[Инструкции-n]] [Case Else

[Инструкции_Else]]

End Select

СписокВыражений – это список с разделителями, состоящий из одной или нескольких форм следующего вида:

Выражение, Выражение To Выражение, Is ОператорСравнения Выражение, где Выражение – любое числовое или строковое выражение. Ключевое слово To задает диапазон значений. При использовании ключевого слова To перед ним должно находиться меньшее значение. Ключевое слово Is с оператором сравнения задает диапазон значений. Если ключевое слово Is не указано, оно вставляется по умолчанию.

Инструкции – это одна или несколько инструкций, выполняемых в том случае, если выражение совпадает с любым компонентом списка от СписокВыражений-1 до СписокВы- ражений-n

Инструкции_Else – одна или нескольких инструкций, выполняемых в том случае, если выражение не совпадает ни

22

с одним из предложений Case. Пример.

Число = InputBox(“Введите целое число”)

Select Case Число Case 1

MsgBox “Число равно 1”

Case 2, 3

MsgBox “Число равно 2 или 3”

Case 4 To 6

MsgBox “Число от 4 до 6”

Case Is >= 7

MsgBox “Число не менее 7”

End Select

Операторы повторения (цикла):

Оператор For - Next

Повторяет выполнение группы инструкций указанное число раз. Синтаксис:

For Счетчик = Начало To Конец [Step Шаг] [Инструкции]

[Exit For]

[Инструкции] Next [Счетчик]

Счетчик изменяется от Начала до Конца с указанным шагом. Если Шаг не указан, он полагается равным 1. Альтернативный способ выхода из цикла предоставляет инструкция

Exit For.

Пример. Суммирование элементов выделенного диапа-

зона.

With Selection

n = .Rows.Count

m = .Columns.Count End With

S = 0

For i = 1 To n For j = 1 To m

23

S = S + Selection.Cells(I,j).Value Next j

Next i

With Selection.End(xlDown)

.Offset(1, 0).Value = “Сумма”

.Offset(1, 1).Value = S End With

В ячейку под первым столбцом выделенного диапазона выводится надпись «Сумма», а найденное значение выводится в соседнюю с ней справа ячейку.

Оператор For Each

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

Синтаксис:

For Each Элемент In Группа

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

[Exit For]

[Инструкции] Next [Элемент]

Примеры.

1. Суммирование элементов выделенного диапазона.

S = 0

For Each c In Selection.Cells S = S + c.Value

Next c

MsgBox s

2. Из рабочей книги удаляется рабочий лист Тест, если такой лист в ней есть.

For Each Лист In Worksheets

If Лист.Name = “Тест” Then

Лист.Delete

End If

Next Лист

3. Ячейки диапазона А1:С4 с положительными значениями окрашиваются в синий цвет, а с неположительным – в

24

красный.

For Each Ячейка In Range(“A1:C4”).Cells

With Ячейка

If .Value <= 0 Then

.Interior.ColorIndex = 3

Else

.Interior.ColorIndex = 5 End If

End With Next Ячейка

Оператор While – Wend

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

Синтаксис:

While Условие [Инструкции]

Wend

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

LotteryEntry = 0

While LotteryEntry <> 7

LotteryEntry = Int(10*Rnd())

Beep

Wend

MsgBox “Ваш номер равен ” & LotteryEntry

Оператор Do – Loop

Выполняет последовательность инструкций, пока заданное условие имеет значение True (случай While) или пока оно не примет значение True (случай Until).

Синтаксис:

Do [{While | Until} Условие] [Инструкции]

[Exit Do]

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

Loop

25

Или

Do [{While | Until} Условие]

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

[Exit Do]

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

Loop [{While | Until} Условие]

В любом месте управляющей структуры Do - Loop может быть размещено любое число инструкций Exit Do, обеспечивающих альтернативные возможности выхода из цикла

Do - Loop

Примеры.

1. Из последовательности случайных чисел выделяется значение 7 (различные варианты использования цикла Do – Loop).

LotteryEntry = 0

Do Until LotteryEntry = 7 LotteryEntry = Int(10*Rnd()) Beep

Loop

MsgBox “Ваш номер равен ” & LotteryEntry

LotteryEntry = 0 Do

LotteryEntry = Int(10*Rnd())

Beep

Loop Until LotteryEntry = 7

MsgBox “Ваш номер равен ” & LotteryEntry

LotteryEntry = 0

Do While LotteryEntry <> 7 LotteryEntry = Int(10*Rnd())

Beep Loop

MsgBox “Ваш номер равен ” & LotteryEntry

26

LotteryEntry = 0 Do

LotteryEntry = Int(10*Rnd()) Beep

Loop While LotteryEntry <> 7

MsgBox “Ваш номер равен ” & LotteryEntry

2. Суммирование вводимых чисел Завершение – ввод любого строкового выражения (пример альтернативного выхода из цикла).

S = 0 Do

X = InputBox(“Введите число”)

If Not IsNumeric (X) Then Exit Do S = S + X

Loop

2.5. Процедура

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

Синтаксис процедуры Sub:

[Private | Public] [Static] Sub Имя

[(СписокПараметров)]

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

[Exit Sub]

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

End Sub

Параметр

Описание

Public

Процедура Sub доступна для всех других про-

 

цедур во всех модулях

Private

Процедура Sub доступна для других процедур

 

только того модуля, в котором она описана

Static

Локальные переменные процедуры Sub сохра-

 

няются в промежутках времени между вызо-

 

вами этой процедуры

27

Параметр

Описание

 

 

Имя

Имя процедуры Sub, удовлетворяющее стан-

 

дартным правилам именования переменных

СписокПарамет-

Список параметров, значения которых пере-

ров

даются в процедуру или возвращаются из про-

цедуры при ее вызове. Разделитель – запятая.

 

Инструкции

Любая группа инструкций.

Инструкция Exit Sub приводит к немедленному выходу из процедуры.

Синтаксис СпискаПараметров:

[Optional] [ByVal | ByRef] [ParamArray]

ИмяПеременной [()] [As Тип] [= ПоУмолчанию]

Параметр

Описание

 

 

Optional

Ключевое слово, указывающее, что параметр не

 

является обязательным. При использовании этого

 

параметра, все последующие параметры из списка

 

тоже должны быть необязательными. Все они

 

должны иметь тип Variant. Не допускается ис-

 

пользование Optional для любого из параметров,

 

если используется ключевое слово ParamArray

ByVal

Указывает, что параметр передается по значе-

 

нию

ByRef

Указывает, что параметр передается по ссылке

 

(используется по умолчанию)

ParamArray

Позволяет задавать произвольное количество

 

параметров. Не может быть использовано со сло-

 

вами ByVal, ByRef, Optional

ИмяПеремен-

Имя переменной, удовлетворяющее стандарт-

ной

ным правилам именования переменных

 

Тип

Допустимы типы: Byte, Boolean, Integer, Long,

 

Currency, Single, Date, String< Variant. При отсут-

 

ствии ключевого слова Optional, могут быть ука-

 

заны также объектный тип и тип, определяемый

 

пользователем.

ПоУмолчанию

Используется только вместе с параметром Op-

 

tional. Если указан тип Object, единственным зна-

 

чением по умолчанию может быть значение Noth-

 

ing

28

Синтаксис процедуры Function:

[Private|Public] [Static] Function Имя

[(СписокПараметров)] [As Тип] [Инструкции]

[Имя = Выражение]

[Exit Function]

[Инструкции] [Имя = Выражение]

End Function

Синтаксис процедуры Function содержит те же элементы, что и процедура Sub. Инструкция Exit Function приводит к немедленному выходу из процедуры Function. Это также самостоятельная процедура, которая может получать значения параметров, выполнять последовательность инструкций и изменять значения параметров. Но процедура Function может применяться в правой части выражения, как и любая другая встроенная функция. Она вызывается в выражении по своему имени, за которым следует список параметров (в скобках).

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

Примеры.

1. Цикл по ячейкам диапазона. Иногда необходимо выполнить некоторую последовательность действий для каждой из ячеек диапазона. Для этого требуется способ перехода или ссылки на каждую ячейку диапазона и обычно используется оператор For Each…Next, который обрабатывает ячейки диапазона как элементы коллекции.

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

Sub ВыделениеЦветом() Dim R As Objekt

For Each R In Range(“ВводимыеДанные”)

If R.Value > 800 Then

29

R.Font.Color = RGB(0, 0, 255) R.Font.Bold = False R.Font.Italic = False

ElseIf R.Value < 500 Then R.Font.Color = RGB(255, 0, 0) R.Font.Bold = False R.Font.Italic = True

Else

R.Font.Color = RGB(0, 128, 0) R.Font.Bold = True R.Font.Italic = True

End If Next R

End Sub

2. Если в программе изменяется диапазон, вставляются или удаляются строки, то цикл For Each…Next может работать некорректно, так как коллекция определяется в начале цикла. Может произойти переход на ячейку вне диапазона, а ячейка из диапазона может быть пропущена. В таком случае используют структуру Do…Loop. Преимущество такого способа – возможность проверки логического условия каждый раз при прохождении цикла, чтобы убедиться, что конец диапазона не достигнут.

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

Sub УдалениеПроданных()

Dim Текущая As Objekt, Следующая As

Objekt

ActiveWorkBook.Seets(“Товары”).Select

Set Текущая = ActiveSheet.Range.(“G2”)

Do While Not IsEmpty(Текущая)

Set Следующая = Текущая.Offset(1, 0)

30

Соседние файлы в папке Информатика