
- •Часть 1.
- •1.1 Введение
- •1.2 Правила оформления конструкций языка vba в общем виде
- •1.3 Идеология визуальных языков
- •1.4 Основные понятия визуальных языков
- •1.5 Дополнительные понятия языка vba
- •2 Переменные и константы
- •2.1 Структура модуля
- •2.2 Объявление переменных и констант
- •Имя_Модуля1.Имя_Поля
- •2.2.2 Неявное и явное объявление переменных ( Оператор Option Explicit )
- •2.3 Неименованные константы
- •2.4 Оператор присваивания
- •2.4.1 Арифметические выражения
- •2.4.2 Строковые выражения
- •2.4.3 Логические выражения
- •Сравнение строковых переменных в логических выражениях
- •2.4.4 Выражения Data
- •2.4.5 Выражения Variant
- •2.4.6 Смешанные выражения
- •2.5 Функции определения типа переменной
- •2.6 Функция форматного преобразования переменной в строковый формат
- •3 Подпрограммы ( процедуры и функции )
- •3.1 Описание подпрограмм
- •3.2 Входные параметры подпрограммы
- •3.3 Вызов подпрограмм
- •3.3.1 Изменение вида входного параметра при вызове подпрограммы
- •3.4 Описание событийной процедуры объекта
- •3.5 Рекурсивные подпрограммы (процедуры и функции)
- •4 Операторы vba
- •4.1 Условный оператор If
- •4.2 Оператор выбора Case
- •4.3 Операторы цикла
- •4.3.1 Циклы for Оператор цикла For .. Next
- •Оператор цикла For Each .. Next
- •Досрочный выход из циклов For
- •4.3.2 Оператор цикла While .. Wend
- •4.3.3 Циклы do Оператор цикла Do While .. Loop
- •Оператор цикла Do .. Loop Until
- •Другие циклы do
- •Досрочный выход из циклов do
- •4.4 Оператор еnd (досрочное завершение программы)
- •4.5 Оператор Exit (досрочный выход из подпрограмм и циклов)
- •4.6 Оператор перехода goto
- •4.7 Оператор On Error (обнаружения ошибок)
- •4.8 Оператор With (обращения к полям структурированных типов, а так же к методам и к потомкам объектов)
- •4.9 Оператор Set (установка и снятие указателя )
- •4.10 Оператор New (создание экземпляров)
- •4.11 Оператор DoEvents (Прерывание работы подпрограммы)
- •4.12 Оператор Shell (Запуск исполняемых файлов)
- •4.13 Оператор AppActivate (Активизация окна другой программы)
- •4.14 Оператор SendKeys (Эмуляция нажатия на клавиши)
- •4.15 Вложенность структур операторов
- •5 Структурированные типы vba
- •5.1 Введение
- •5.2 Массивы
- •5.2.1 Статический массив
- •5.2.2 Динамический массив
- •5.2.3 Объявление массива через функцию Array
- •5.2.4 Функции определения размерности массива
- •5.2.5 Опрос, ввод и вывод в цикле ячеек массива
- •5.2.6 Массивы массивов
- •5.2.7 Поиск максимума и минимума в массиве
- •5.2.8 Сортировка массива
- •5.2.9 Оператор высвобождения памяти занятой динамическим массивом и обнуления ячеек статического массива (Erase)
- •5.3 Записи ( и массивы записей)
- •5.3.1 Запись с константными полями
- •5.4 Семейства (Коллекции)
- •5.5 Объекты
- •5.5.1 Введение
- •5.5.2 Объект Application
- •5.5.3 Объекты ActiveWorkbook, ThisWorkbook, Workbooks (связь с книгой Excel)
- •5.5.4 Объекты ActiveSheet, Worksheets (связь с листом книги Excel)
- •5.5.5 Объекты Rows, Columns ,Range, Cells, Selection, ActiveCell (связь со строками, столбцами и ячейками листа Excel)
- •5.5.6 Элементы управления
- •Элемент управления CommandButton (Кнопка)
- •Элементы управления CheckBox, OptionButton (Флажок, Переключатель)
- •Элемент управления TextBox (текстовый редактор)
- •Элементы управления ListBox, ComboBox (Список ,Поле со списком)
- •Элементы управления ScrollBar ,SpinButton (Полоса прокрутки ,Счетчик)
- •Элемент управления Imаge (Рисунок)
- •5.6 Объект Форма
- •6 Диалоги
- •7 Работа с файловой системой
- •7.1 Введение
- •7.1.3 Работа с файловой системой через программу Мой компьютер (My Computer)
- •7.2 Функция dir ( Просмотр содержимого директории и определение наличия файла на диске)
- •7.3 Работа с дисковым пространством
- •7.3.1 Дополнительные функции для работы с дисковым пространством
- •7.4 Работа с файлами
- •7.4.1 Работа с текстовым файлом
- •7.4.2 Работа с двоичным файлом
- •7.4.3 Работа с файлом произвольного типа данных
- •7.5 Просмотр содержимого ярлыка
- •7.6 Функция Environ (Определение местонахождения служебных директорий Windows)
- •Оглавление
- •2 Переменные и константы 9
- •3 Подпрограммы ( процедуры и функции ) 34
- •4 Операторы vba 47
- •5 Структурированные типы vba 70
- •5.3 Записи ( и массивы записей) 83
- •5.4 Семейства (Коллекции) 85
- •5.5 Объекты 87
- •6 Диалоги 119
- •7 Работа с файловой системой 122
- •Часть 1
5.2.6 Массивы массивов
В языке VBA возможно присвоить ячейке массива типа Variant значение другого массива.
Имя_Массива1(Индекс_Ячейки) = Имя_Массива2( )
И, таким образом , сделать массив в котором, например, имеются строки различной длинны. В примере ниже показано, как объявить такой массив и как обращаться к ячейкам указанного массива.
Dim A(1 To 2) As Long
Dim B(1 To 3) As Long
Dim C(1 To 2) As Variant
A(1) = 1
A(2) = 2
B(1) = 5
B(2) = 6
B(3) = 7
‘Присваиваем ячейке C(1) массив A
C(1) = A( )
‘Присваиваем ячейке C(2) массив B
C(2) = B( )
n = C (1) (2)
n1 = C (2) (1)
После выполнения указанного нами выше фрагмента программы значение переменных n, n1 будет следующие:
n = 2
n1 = 5
Многомерный массив, описанный в данной главе, является по своей структуре аналогом многомерного массива объявленного функцией Array. И с данным массивом программист обращается точно так же, как с многомерным массивом полученным через функцию Array.
5.2.7 Поиск максимума и минимума в массиве
В примере ниже показан поиск максимума и минимума ячеек и их индексов в массиве A, индексы которых лежат в диапазоне 1-N:
‘Переменные для поиска максимального значения в массиве и индекса ячейки с максимальным значением
Максимум = A(1)
ИндексМаксимума =1
‘Переменные для поиска минимального значения в массиве и индекса ячейки с минимальным значением
Минимум = A(1)
ИндексМинимума =1
For i = 1 to N
If A(i) > Максимум Then
Максимум = A(i)
ИндексМаксимума = i
End if
If A(i) < Минимум Then
Минимум = A(i)
ИндексМинимума = i
End if
Next i
5.2.8 Сортировка массива
В примере ниже показан один из методов сортировки одномерного массива A – по возрастанию и одномерного массива B - по убыванию. В примере сортируются ячейки массива, индексы которых лежат в диапазоне 1-N. Переменная Обмен предназначена для обмена данных между двумя ячейками. Переменная Обмен должна иметь тот же тип, что и ячейка массива.
For i = 1 to N-1
For j = i+1 to N
If A(i) >A(j) Then
Обмен = A(i)
A(i) = A(j)
A(j) = Обмен
End if
If B(i) <B(j) Then
Обмен = B(i)
B(i) = B(j)
B(j) = Обмен
End if
Next j
Next i
5.2.9 Оператор высвобождения памяти занятой динамическим массивом и обнуления ячеек статического массива (Erase)
Оператор Erase высвобождает память занятую динамическим массивом и обнуляет значение всех ячеек статического массива. Формат вызова оператора:
Erase Имя_Массива
5.3 Записи ( и массивы записей)
Представляют собой специальный тип переменных созданный пользователем. Переменная типа запись, имеет поля, к которым можно обращаться точно так же, как к полям модулей или объектов. Объявляется запись в общей области модуля.
Объявление типа:
[Private/ Public] Type Имя_пользовательского_типа
Имя_Поля1 [as тип]
Имя_Поля2 [as тип]
.
.
End Type
Пользовательский тип запись является глобальным для всего проекта, если его описание начинается со служебного слова Public или если отсутствуют служебные слова Private и Public в описании данного типа. Запись Public можно объявить только в модуле макросов. В модуле, после объявлением типа записи, можно объявить переменную с соответствующим пользовательским типом. К каждому полю такой переменной можно обратится по следующему правилу:
ИмяПеременой.ИмяПоля
Массив записей объявляется после объявления записи по следующему формату:
Dim ИмяМассива(Размерность) as ИмяЗаписи
Если объявлен массив записей, то происходит обращение с начало к ячейке массива, а затем, к его полю:
ИмяМассива(АдресЯчейки).ИмяПоля
Пример ввода и вывода массива записей вы можете посмотреть в параграфе 7.3.3 Работа с файлом произвольного типа данных.