
- •Часть 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.4 Функции определения размерности массива
Существуют две функции LBound – для определение нижней размерности ячеек массива, и, UBound – определение верхней размерности массива. Формат вызова данных функций следующий:
LВound(ИмяМассива [ , НомерСтруктуры])
Если параметр “НомерСтруктуры”, опущен, то соответствующая функция выдает размерность первой структуры в массиве.
Пример использования функций определения размерности массива:
Dim mas (1 to 50, -3 to 6)
A = LBound( mas , 1 )
B = UBound( mas , 1 )
C = LBound( mas , 2 )
D = UBound( mas , 2 )
Значение переменных A,B,C,D будет следующие:
A = 1
B = 50
C = -3
D = 6
Указанные функции могут быть использованы для определения размерности статического и динамического массива. Если массив объявлен функцией Array, то, указанным выше способом, размерность можно будет определить только одномерного массива, или только размерность первой структуры массива объявленного функцией Array. Однако, есть другой способ обращения к определенной структуре, который позволяет определить размерность многомерного массива объявленного функцией Array:
LBound( ИмяМассива(НомерСтроки) )
Пример:
V = Array ( Array(6, 8) , Array(10, 4, 7) )
A = LBound( V(0) )
B = UBound( V(0) )
C = LBound( V(1) )
D = UBound( V(1) )
Значение переменных A,B,C,D будет следующие:
A = 0
B = 1
C = 0
D = 2
5.2.5 Опрос, ввод и вывод в цикле ячеек массива
Ячейки одномерного массива опрашиваются следующим образом:
For Индекс = нач.ячейка то кон.ячейка
A(Индекс)
Next Индекс
где
Индекс – переменная, в которой перебираются индексы ячеек
нач.ячейка , кон.ячейка – соответственно, индекс начальной и конечной ячейки, т.е. диапазон перебираемых индексов.
A – имя массива , к ячейкам которого обращаются.
Пример:
For i = 2 то 5
A(i) = 1
Next i
В данном примере присваивается значение 1 ячейкам с индексами 2-5 массива A
Если неизвестна размерность одномерного массива можно применить цикл For each. Пример опроса ячеек одномерного массива циклом For each приведен нами в главе Входные параметры процедуры в таблице Виды входных параметров в параметре ParamArray.
Если массив многомерный, то применяют вложенный цикл:
For i =1 to 9
For j =1 to 9
A(i,j) = i *j
Next j
Next i
В данном примере переменная i является индексом строк, а переменная j – индексом столбцов двумерного массива*. В начале, заполняется первая строка массива, затем вторая и т.д. Т.е. массив опрашивается построчно. Ячейкам двумерного массива A присваивается произведения индекса строки на индекс столбца.
Оператор For each можно применять для опроса ячеек двумерных массивов, причем, без всяких вложений. В двумерных массивах опрос ячеек оператором For each без вложений производится по столбцам. Ячейки двумерного массива объявленного функцией Array нельзя опрашивать циклом For each без вложений, они опрашиваются следующим образом:
V = Array(Array(1, 2), Array(3, 4, 5))
S = 0
For Each n In V
For Each n1 In n
S = S + n1
Next n1
Next n
В данном примере в переменную S заносится сумма всех значений ячеек массива V, т.е. после выполнения программ S =15. В данном примере массив опрашивается по строкам.
Приведем примеры ввода ячеек одномерного числового массива через диалог InputBox, и пример вывода двумерного массива в ячейки активного листа Excel:
‘Ввод значений ячеек в диапазоне 1-N
For i = 1 to N
A(i) = Val( InputBox(“Введите ячейку A” & i))
Next i
‘Вывод двумерного массива по строкам
For I = 1 to n
For j = 1 to n1
Cells( i, j) = B( i, j )
Next j
Next i