- •2.1. Алфавит и словарь языка
- •2.2. Переменные
- •2.3. Константы
- •2.4. Строковые переменные
- •2.5. Массивы
- •2.6. Пользовательские типы данных
- •2.7. Операции VBA
- •2.8. Объектная модель Excel
- •2.8.1. Свойства и методы объектов
- •2.8.2. Отображение объектной модели Excel
- •2.8.2.1. Иерархия объектной модели
- •2.8.2.2. Ссылка на объекты в коде VBA
- •2.8.3. Работа с объектами
- •2.8.3.1. Задание свойств объекта
- •2.8.3.2. Использование методов объекта
- •2.8.3.3. Переменные-объекты
- •2.8.3.4. Коллекции
- •2.8.3.5. Метод Add
- •2.8.3.6. Свойство Count
- •2.8.4. Свойства и методы основных объектов Excel
- •2.8.4.1. Объект Application
- •2.8.4.2. Объект Worksheet
- •2.8.4.3. Объект Range
- •2.8.5. Просмотр объектов
- •2.8.6. Использование справочной системы
- •2.8.6.1. Использование функциональной клавиши F1
- •2.8.6.2. Использование помощника
- •2.9. Ввод и вывод данных
- •2.9.3. Метод InputBox
- •2.9.4. Объединение текстовых строк
- •2.10. Концепция событий Excel
- •2.10.1. Типы событий Excel
- •2.10.2. События объекта Workbook
- •2.10.3. События объекта Worksheet
- •2.10.4. События объекта Application
- •2.10.5. События объекта UserForm
- •2.10.6. События, не связанные с конкретными объектами
- •2.10.6.1. Метод OnKey
- •2.10.6.2. Событие OnTime
- •2.11. Формы пользователя
- •2.11.1. Свойства, методы и события экранных форм
- •2.11.1.1. Некоторые свойства форм
- •2.11.1.2. Некоторые методы форм
- •2.11.1.3. Некоторые события форм
- •2.11.2. Элементы управления
- •2.11.2.1. Элемент управления Label (Надпись)
- •2.11.2.1.1. Окно свойств формы
- •2.11.2.2. Элемент управления CommandButton (Кнопка)
- •2.11.2.3. Элемент управления TextBox (Текстовое поле)
- •2.11.2.4. Элемент управления ComboBox (комбинированный список)
- •2.11.2.5. Элемент управления ListBox (список)
- •2.11.2.6. Элемент управления CheckBox (Флажок)
- •2.11.2.7. Элемент управления ToggleButton (Выключатель)
- •2.11.2.8. Элемент управления OptionButton (Переключатель)
- •2.11.2.9. Элемент управления Image (Рисунок)
- •2.11.2.12. Элемент управления RefEdit (Поле со свёртыванием)
- •2.11.2.13. Элементы управления на рабочем листе
- •2.12. Инструкции VBA
- •2.12.1. Оператор присваивания
- •2.12.2. Инструкция Set
- •2.12.3. Циклы
- •2.12.3.1. Инструкция For… Next
- •2.12.3.2. Инструкция While…Wend
- •2.12.3.3. Инструкция Do... Loop
- •2.12.3.4. Инструкция For Each…Next
- •2.12.4. Инструкции перехода
- •2.12.4.1. Инструкция условного перехода If…Then…Else
- •2.12.4.2. Инструкция Select…Case
- •2.12.4.3. Инструкция безусловного перехода GoTo
- •2.12.4.4. Инструкции перехода к обработчику ошибок On Error
- •2.12.4.5. Инструкции прерывания выполнения блока Exit
- •2.13. Функции VBA
- •2.13.1. Встроенные функции
- •2.13.1.1. Математические функции
- •2.13.1.2. Функции преобразования данных
- •2.13.1.3. Функции даты и времени
- •2.13.1.4. Строковые функции
- •2.13.1.5. Примеры использования функций VBA
- •2.13.1.5.1. Удаление ненужных символов
- •2.13.1.5.2. Определение длины строки
- •2.13.1.5.3. Сравнение и поиск строк
- •2.13.1.5.4. Выделение части строки
- •2.13.1.5.5. Форматирование значений данных
- •2.13.2. Функции, определённые пользователем
- •2.14. Файлы VBA
- •2.14.1. Типы файлов в VBA
- •2.14.2. Открытие и закрытие файла
- •2.14.3. Ввод данных в файл последовательного доступа
- •2.14.4. Вывод данных из файла последовательного доступа
- •2.14.5. Работа с файлом произвольного доступа
- •2.15. Создание процедуры
- •2.16. Выполнение процедуры
- •2.17. Сохранение процедуры
- •2.18. Запись последовательности действий пользователя
- •2.19. Просмотр кода макроса
- •3.1. Тестирование и отладка как этап разработки приложений
- •3.1.1. Отладка
- •3.1.1.1. Режим останова
- •3.1.1.2. Использование окна Immediate
- •3.1.1.2.1. Просмотр значений в окне Immediate
- •3.1.1.3. Пошаговое выполнение программ
- •3.1.2. Исправление ошибок
- •Библиографический список
- •Оглавление
84
и при нажатии кнопки “Да” выводится диалоговое окно
В отличие от цикла Do While цикл Do Until выполняется до тех пор, пока выражение условия имеет значение False.
Пример
Sub DUN() Dim j As Integer Range("K1") = 0 j = 0
Do Until Range("K1") > 8 Range("K1") = Range("K1") + j j = j + 1
Loop
End SubTextBox1.Text = Sum
В результате выполнения этого примера в ячейке K1 активного листа будет выведено вычисленное значение, равное 10.
2.12.3.4. Инструкция For Each…Next
Инструкция For Each применяется для выполнения одного и того же набора операторов для элемента массива или коллекции. Инструкция For Each имеет следующий формат:
For Each элемент In группа
[Инструкции] [Exit For] [Инструкции]
Next
Формат инструкции Do …Loop содержит следующие элементы:
Элемент инструкции |
Описание элемента |
Элемент |
Обязательный. Переменная, используемая для итерации по |
|
элементам коллекции или массива. Может быть только |
|
Variant-переменной. |
Группа |
Обязательный. Имя коллекции объектов или массива. |
Инструкции |
Необязательный. Один или более операторов, которые вы- |
|
полняются для каждого элемента в Группа |
Блок For Each… выполняется, если в Группа имеется, по крайней мере, один элемент. Все инструкции цикла выполняются для каждого элемента Группа. После этого управление передаётся инструкции, следующей за ключевым словом Next.
85
Цикл For Each...Next похож на For...Next за исключением того, что он повторно выполняет одну и ту же группу операторов для каждого элемента набора объектов или массива. Это особенно полезно в том случае, когда не известно число элементов в наборе или когда их количество может измениться, пока работает процедура.
В приведённой ниже процедуре ForEach используется динамический массив Мас, размерность которого L определяется как целая часть произведения значения случайной функции Rnd в инструкции ReDim. Определение целой части производится при помощи встроенной функции VBA Int. Если количество элементов массива равно 0, то об этом выдаётся сообщение и происходит выход из процедуры.
По инструкции For i = 1 To L производится присвоение значений элементам массива Мас случайными числами и вывод их на экран.
По инструкции For Each… осуществляется присвоение значений ячейкам A1:AL ячейкам активного рабочего листа A1: AL случайных чисел.
Option Base 1
Option Explicit
––––––––––––––––––––––––––––––––––––––––––––––––––––––
Sub ForEach() Dim Мас() As Single
Dim L As Integer, i As Integer, k As Integer Dim n As Variant
L = Int(Rnd * 10)
If L = 0 Then
MsgBox "Количество элементов массива равно " & L Exit Sub
End If
MsgBox "Количество элементов массива равно " & L
ReDim Мас(L) ' Устанавливается размер динамического массива
For i = 1 To L Мас(i) = Rnd
MsgBox "Мас(" & i & ")=" & Мас(i)
Next i k = 0
For Each n In Мас k = k + 1 Cells(1, k) = n
Next n
End Sub
В процедуре РабочиеЛисты, приведенной ниже, применена конструкция For Each - Next коллекции Sheets активной рабочей книги.
Sub РабочиеЛисты()
Dim ЛИСТ As Worksheet
Dim s As String