Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книга1(полный конспект).docx
Скачиваний:
55
Добавлен:
23.12.2018
Размер:
49.16 Mб
Скачать

9.5.2. Конструкция For … Next

Циклы For … Next хорошо работают, когда заранее известно число повторений цикла. В данном цикле присутствует переменная, называемая счетчиком цикла, которая увеличивается или уменьшается на заданную величину при каждом повторении цикла. Общий синтаксис таков:

For counter = start To end [Dtep increment]

Statements

Next [counter]

Где counter  представляет собой любую числовую переменную обычно с типом Integer или Long. Start  определяется любым числовым выражением и определяет начальное значение переменной counter. End - конечное значение переменной counter. По умолчанию VBA  каждый раз после завершения инструкций из цикла увеличивает переменную counter на 1. Другое значение увеличения (или уменьшения) можно задать с помощью необязательного ключевого слова Step. После него необходимо указать величину шага increment. Ключевое слово Next сигнализирует о том, что достигнут конец цикла.

Sub Poligon()

Const Title = "Ввод данных"

Dim Grad As Integer

Dim Min As Integer

Dim Sec As Integer

Dim Deg As Double

Dim Summ As Double

Sum = 0

Angle = 0

On Error GoTo Line

Num = InputBox("Введите число углов полигона:", Title)

For I = 1 To num

On Eror GoTo Line

Angle = InputBox("Введите внутренний угол", Title)

Grad = Int(Angle)

Min = Int((Angle - Gad) * 100)

Sec = Round(((Angle - Gad) * 100 - Min) * 100)

Deg = Grad + Min / 60 + Sec / 3600

Sum = sum + Deg

Next I

MsgBox "Сумма углов измеренных:" & Summ & Chr(13) &_ "Сумма углов теоретических:" & 180 * (num - 2) & Chr(13) &_ "Невязка" & Summ - 180 * (num - 2)

Line

MsgBox "Ошибка ввода данных"

End Sub

9.5.3. Конструкция For Each…Next

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

Синтаксис конструкции цикла For Each…Next таков:

For Each element In group

Операторы

Next Element

В следующем примере - функция SheetExists, которая использует цикл For Each…Next, чтобы определить существует ли указанный лист в книге Excel.

1: Function SheetExists(sName As String) As Boolean

2: Dim aSheet As Object

3: SheetExists = False

4: For Each aSheet In ActiveWorkbook.Sheets

5: If (StrComp(aSheet.Name, sName, vb TextCompare) = 0) Then

6: SheetExists = True

7: End If

8: Next aSheet

9: End Function

10: Sub Test_SheetExists()

11: Dim uStr As String

12: uStr = InputBox(«Какой лист вы хотите найти в текущей книге»)

13: If SheetExists(uStr) Then

14: MsgBox «Лист» & uStr & «найден в текущей книге.»

15: Else

16: MsgBox «В текущей книге листа» & uStr & «нет»

17: End If

18: End Sub

Функция SheenExists имеет тип Boolean, т.е. возвращает True (истина) если рабочий лист с нужным пользователю именем существует и False (ложь) если его нет.

В строке 3 назначим функции значение False, на случай если листа не окажется.

В строке 4 начинается цикл. В нем группой является коллекция ActiveWorkbook.Sheets. То есть перебираются все листы (Sheets) в активной рабочей книге (ActiveWorkbook).

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