
- •Содержание
- •Раздел 1. Быстрый старт 2
- •Раздел 2. Редактор Visual Basic 11
- •Immediate Window (окно проверки) 15
- •Раздел 3. Переменные и типы данных 27
- •Раздел 4. Операторы управления 51
- •Раздел 5. Процедуры, подпрограммы и функции 66
- •Раздел 6. Объекты ms Excel 101
- •Раздел 7. Пользовательские формы 139
- •Immediate Window (окно проверки) 177
- •Введение
- •Раздел 1.Быстрый старт Использование макрорекордера
- •Запись макроса
- •Запуск макроса
- •Абсолютные и относительные ссылки Запись формулы на рабочем листе
- •Макрорекордер
- •Диалоговые окна для ввода/вывода данных
- •Функция InputBox
- •Функция MsgBox
- •Раздел 2.Редактор Visual Basic
- •Окна редактора vb
- •Project Window (окно проекта)
- •Properties Window (Окно свойств)
- •Code (окно программы)
- •Immediate Window (окно проверки)
- •Получение справки
- •Запись процедур
- •Режимы работы с программой
- •Ошибки и их обнаружение
- •Отладка
- •Меню и панели инструментов Visual Basic
- •Панели инструментов Стандартная панель инструментов
- •Панель инструментов отладки
- •Раздел 3.Переменные и типы данных Объявление переменных
- •Важность объявления переменных
- •Область видимости переменных
- •Время жизни переменных
- •Инициализация переменных
- •Операции с элементарными данными
- •Оператор присваивания
- •Выполнение операций
- •Арифметические операции
- •Операции сравнения
- •Оператор Like
- •Логические операции
- •Символьные операции
- •Приоритет операций
- •Операции с другими типами данных
- •Объектные переменные
- •Массивы
- •Динамические массивы
- •Пользовательский тип
- •Раздел 4.Операторы управления
- •Условный оператор If
- •Оператор выбора Select Case
- •Операторы цикла
- •Цикл For…Next
- •Цикл For Each…Next
- •Оператор Set
- •Цикл Do…Loop
- •Цикл While…Wend
- •Раздел 5.Процедуры, подпрограммы и функции
- •Классификация процедур
- •Структура и объявление процедуры
- •Синтаксис объявления процедуры общего типа
- •Синтаксис объявления функции
- •Вызов процедуры
- •Параметры и аргументы
- •Возврат значения функции
- •Использование процедур-функций на рабочем листе
- •Поименованные аргументы
- •Использование необязательных аргументов
- •Использование параметра ParamArray
- •Вызов процедур другого проекта
- •Автопроцедуры
- •Событийные процедуры
- •Рекурсивные процедуры
- •Встроенные функции Классы функций
- •Использование табличных функций
- •Организация интерфейса при помощи встроенных функций
- •Функция MsgBox
- •Функция InputBox
- •Строковые функции
- •Примеры на использование различных строковых функций Функция Format
- •Функция Val
- •Функции Len, Mid
- •Функция Left
- •Функция Instr
- •Функция Chr
- •Математические функции
- •Функции Int и Fix
- •Функция Log
- •Функции Randomize и Rnd
- •Функции даты и времени
- •Примеры функций даты и времени Функции Day, Month, Year, DateSerial
- •Функции Now, Time, Timer
- •Функция WeekDay
- •Функции Hour, Minute, Second
- •Раздел 6.Объекты ms Excel
- •Свойства объектов
- •Методы объектов
- •Модель объектов
- •Коллекции объектов
- •Обращение к объекту Контейнеры
- •Ссылка на объект
- •Оператор With
- •Использование объектных переменных
- •Объект Application
- •Активные объекты
- •Свойства, влияющие на высвечивание на экране Свойство DisplayAlerts (r/w Boolean)
- •Свойства DisplayFormulaBar (r/w Boolean), DisplayStatusBar (r/w Boolean)
- •Свойство ScreenUpdating (r/w Boolean)
- •Свойства Top, Left, Height, Width, UsableWidth, WindowState
- •Свойство Visible (r/w Boolean)
- •Другие свойства объекта Application
- •Методы Метод Calculate
- •Метод CheckSpelling
- •Метод OnTime
- •Метод Wait
- •Коллекции объектов
- •Объекты Workbooks и Workbook
- •Событийные процедуры
- •Объекты Sheets, WorkSheets и WorkSheet
- •Свойства Свойство Name (r/w String)
- •Свойство Type (r/o String)
- •Свойство UsedRange
- •Свойства Next и Previous
- •Свойство Parent
- •Свойство Visible (r/w Boolean)
- •Методы Метод Add
- •Методы Move и Select
- •Событийные процедуры
- •Объект Range
- •Свойства Cвойство Range
- •Свойство Cells
- •Свойство Offset
- •Метод Union и свойство Areas
- •Свойства Column и Row (r/o Integer)
- •Свойства Columns и Rows
- •Свойство CurrentRegion
- •Cвойства, связанные с шириной и высотой ячейки
- •Методы Методы Select и Activate
- •Метод Clear
- •Цветовое оформление объекта Range Свойство ColorIndex
- •Свойство Color
- •Раздел 7.Пользовательские формы
- •Режимы работы с формой
- •Режим конструктора
- •Элементы управления
- •Событийные процедуры
- •Режим выполнения
- •Объекты UserForm и Controls
- •Разработка приложения
- •Приложение 1
- •Конструирование начальной формы
- •Свойства формы и элементов управления
- •Создание событийных процедур
- •Конструирование формы для выбора рабочего листа
- •Создание событийных процедур
- •Элемент ListBox
- •Событийная процедура инициализации формы
- •Завершение разработки приложения
- •Связь формы с ячейками рабочего листа
- •Элемент TextBox
- •Элемент ListBox
- •Приложение 2
- •Конструирование форм
- •Процедуры
- •Приложение a. Справочная система Просмотр объектов, их свойств и методов (Object Browser)
- •Окно Object Browser
- •Панель инструментов Object Browser
- •Выход из Object Browser
- •Интерактивная подсказка
- •Приложение b. Инструментальные средства отладки программ
- •Контрольные точки или точки останова
- •Трассировка или пошаговое выполнение программы
- •Использование объекта Debug
- •Окна отладчика
- •Immediate Window (окно проверки)
- •Окно значения переменной
- •Locals Window (окно локальных переменных)
- •Окно контрольных значений (Watches)
- •Приложение c. Основные формы записи алгоритмов
- •Понятие "алгоритм"
- •Классификация алгоритмов
- •Способы записи алгоритмов
- •Запись на естественном языке
- •Изображение алгоритма в виде графических символов
- •Представление основных типов алгоритмов в виде блок-схем
Цикл For Each…Next
Цикл объектного типа используется для массивов или групп (коллекций) объектов. Циклы объектного типа повторяют последовательность операторов ровно столько раз, сколько элементов содержится в массиве или в группе объектов. В отличие от вычисляемого цикла переменная цикла не является счетчиком цикла, а содержит значение элемента массива или ссылку на объект из группы объектов.
Синтаксис оператора
For Each element In group [statements] [Exit For] [statements]
Next [element]
element – переменная, значения которой суть элементы из группы;
group –массив данных или группа объектов;
statements – последовательность операторов, выполняемая для каждого элемента;
Exit For – оператор, осуществляющий немедленный выход из цикла.
Важно
Если цикл выполняется для массива, то переменная element должна быть переменной типа Variant.
Если цикл выполняется для коллекции объектов, то тип переменной element – Object или должен совпадать с типом элементов коллекции объектов.
Не рекомендуется внутри цикла изменять количество элементов массива или группы, так как новый элемент может не обработаться командами тела цикла.
Цикл For Each для группы объектов более эффективен, чем цикл For Next.
Оператор Set
Для работы с объектами требуется устанавливать значение объектной переменной. Напомним, что объектная переменная хранит адрес, указывающий на объект.
Объявление переменных объектного типа ничем не отличается от объявления переменных других типов.
В отличие от переменных других типов установка значения объектной переменной выполняется при помощи оператора Set.
Синтаксис оператора
Set objectvar = objectexpression|Nothing
objectvar – объектная переменная;
objectexpression – объектное выражение;
Nothing – ключевое слово, указывающее на отсутствие ссылки на объект.
Переменная может иметь тип любого объекта, определенного в языке VBA. В качестве объектного выражения можно использовать свойство, функцию или метод, возвращающие объект нужного типа.
Внимание
Оператор Set только устанавливает ссылку на объект, не создавая никакой копии.
Типы объектного выражения и объектной переменной должны совпадать.
Чтобы очистить объектную переменную, используйте значение Nothing в операторе присваивания, которое аннулирует ссылку на объект и освобождает ресурсы. Например: Set rng= Nothing.
Примеры
Просуммировать элементы массива.
Sub for_each_array()
Dim arr(1 To 5), i As Variant, s As Long
For i = 1 To 5 ‘инициализация элементов
‘массива
arr(i) = i
Next i
For Each i In arr ‘суммирование элементов
s = s + i
Next i
Debug.Print s
End Sub
В вычисляемом цикле значения элементов массива устанавливаются равными номеру элемента массива.
В цикле объектного типа подсчитывается сумма элементов массива: переменная цикла i принимает значения элементов массива.
Заполнить интервал ячеек последовательными натуральными числами.
Sub fill_obj() Dim Obj_range As Range, p As Object, i as Integer i=1 Set Obj_range = Range("A1:B6") For Each p In Obj_range p.value = i i=i+1 Next p End Sub
|
Переменная p (переменная цикла объектного типа) перебирает все ячейки интервала Obj_range, устанавливая их значения в номер элемента.