
- •Оглавление
- •Введение
- •1. Объекты ms Excel
- •1.1. Объекты, их свойства и методы
- •1.1.1. Свойства: присвоение и использование значений
- •1.1.1.1. Присвоение значений
- •1.1.1.2. Использование значений
- •1.1.2. Примеры использования методов рабочей книги Excel
- •1.1.2.1. Вызов метода
- •1.1.2.2. Передача аргумента в метод
- •1.2. Ссылки на одиночные объекты и объекты из семейств
- •1.2.1. Различия между одиночными объектами и объектами из семейств
- •1.2.2. Семейства как объекты
- •1.2.3. Ссылка на объект
- •1.3. Иерархия объектов ms Excel
- •1.3.1. Иерархическая структура
- •1.3.2. Доступ к объектам через свойства и методы
- •1.4. Объект Application
- •1.4.1. Свойства объекта Application
- •1.4.2. Методы объекта Application
- •1.5. Объект Workbook и семейство Workbooks
- •1.5.1. Свойства объекта Workbook и семейства Workbooks
- •1.5.2. Методы объекта Workbook и семейства Workbooks
- •1.5.3. Функции, используемые для работы с файлами и папками
- •1.5.4. Функция MsgBox
- •1.5.5. Функция InputBox
- •1.6. Объект Worksheet
- •1.6.1. Свойства объекта Worksheet и семейства Worksheets
- •1.6.2. Методы объекта Worksheet и семейства Worksheets
- •1.7. Объект Range
- •1.7.1. Свойства объекта Range
- •1.7.2. Методы объекта Range
- •2. Использование переменных в vba
- •2.1. Допустимые имена
- •2.2. Типы данных переменных vba
- •2.3. Описание переменной
- •2.4. Использование переменных
- •2.5. Преимущества переменных
- •2.6. Объектные переменные
- •2.6.1. Задание объектной переменной
- •2.6.2. Объектные переменные общего типа
- •2.6.3. Объектные переменные конкретных типов
- •2.6.4. Преимущества объектных переменных
- •2.7. Неявное описание переменных и тип Variant
- •2.8. Обязательное описание переменных
- •2.9. Типы данных по умолчанию
- •2.10. Пользовательские типы данных
- •3. Массивы vba
- •3.1. Размерность массива
- •3.2. Объявление массива
- •3.3. Использование массива
- •3.4. Номер первого элемента и границы массива
- •3.5. Динамические массивы
- •3.6. Сохранение данных в динамическом массиве при изменении последней размерности
- •3.7. Пять функций для работы с массивами
- •4. Константы
- •5. Вызов одной программы из другой
- •5.1. Фрагментирование кода
- •5.2. Передача данных при вызове программы
- •6. Использование функций в vba
- •7. Область видимости переменных, констант, подпрограмм и функций
- •7.1. Область видимости переменных
- •7.1.1. Переменные уровня процедуры
- •7.1.2. Переменные уровня модуля
- •7.1.3. Переменные уровня проекта
- •7.1.4. Сохраняемые переменные
- •7.1.5. Область видимости подпрограмм и функций
- •7.1.6. Сохраняемые подпрограммы и функции
- •8. Управляющие структуры
- •8.1. Управляющая инструкция If-Then-Else
- •8.2. Управляющая инструкция Select Case
- •8.3. Управляющая инструкция For-Next
- •8.4. Управляющая инструкция For-Each-Next
- •8.4.1. Инструкция For-Each-Next с многомерными массивами
- •8.4.2. Инструкция For-Each-Next с семействами
- •8.5. Управляющая инструкция While-Wend
- •8.6. Управляющая инструкция Do-Loop
- •9. Инструкция With
- •10. Встроенные функции vba
- •10.1. Математические функции
- •10.2. Функции проверки типов
- •10.3. Функции преобразования форматов
- •10.4. Функции обработки строк
- •10.5. Функции времени и даты
- •11. Обработка ошибок
- •11.1. Предотвращение ошибок программными средствами
- •11.2. Обработка ошибок, инструкция On Error
- •12. Разработка пользовательского интерфейса
- •12.1. Форма (UserForm)
- •12.1.1. Вставка формы
- •12.1.2. Основные свойства и методы формы
- •12.1.3. События формы
- •12.2. Элементы управления формы vba
- •12.2.1. Некоторые общие свойства элементов управления
- •12.2.2. Соглашения об именах
- •12.2.3. Некоторые общие методы элементов управления
- •12.2.4. Общие события элементов управления
- •12.3. Кнопка (СоmmandButton)
- •12.4. Поле (TextBox)
- •12.5. Надпись (Label)
- •Начальные условия
- •Выполнение задания:
- •12.6. Список (ListBox)
- •12.6.1. Основные свойства элемента управления ListBox
- •12.6.2. Методы ListBox
- •12.6.3. Заполнение списка
- •12.6.4. Пример создания списка
- •12.6.5. Определение выбранных элементов списка
- •12.7. Поле со списком (ComboBox)
- •12.8. Флажок (CheckBox)
- •12.9. Выключатель (ToggleButton)
- •12.10. Переключатель (OptionButton)
- •12.11. Полоса прокрутки (ScrollBar) и счетчик (SpinButton)
- •12.12. Создание нестандартных меню и панелей инструментов
- •12.12.1. Объект CommandBar и семейство CommandBars
- •12.12.2. Методы объекта CommandBar
- •12.12.3. Свойства объекта CommandBar
- •12.12.4. Семейство CommandBarControls и объект CommandBarControl
- •12.12.5. Пример создания/удаления панели инструментов
- •12.12.5.1.Создание панели инструментов
- •12.12.5.2. Удаление панели инструментов
- •12.12.6. Пример создания/удаления меню
- •12.12.6.1. Создание меню
- •12.12.6.2. Удаление меню
- •13. Обработка событий объектов Workbook и Worksheet
- •13.1. События объекта Workbook
- •13.1.1. Событие Open
- •13.1.2. Событие BeforeClose
- •13.1.3. Событие SheetActivate
- •13.2. События объекта Worksheet
- •13.2.1. Событие Activate
- •13.2.2. Событие Deactivate
- •13.2.3. Событие SelectionChange
- •Библиография
2.3. Описание переменной
Перед использованием переменную желательно описать (или, как ещё говорят, объявить), чтобы VBA выделил память для ее хранения. Объем выделяемой памяти определяется типом переменной (см. список выше). Для описания переменных используется инструкция Dim. Как правило, блок объявления переменных располагается в начале программы или модуля VBA.
Описание переменных – это необязательная процедура, но, выполнив ее, вы существенно повысите производительность программы и облегчите ее отладку.
Ниже приведен пример использования инструкции Dim для описания переменной:
Dim Var1 As Integer
В этой команде объявляется переменная Varl типа Integer. Это означает, что VBA выделил для нее 2 байта памяти. В команде использованы три ключевых слова — Dim, As и Integer. Рассмотрим их подробнее.
Dim – ключевое слово, начинающее описание переменной;
Varl – имя переменной;
As – ключевое слово, отделяющее имя переменной от типа данных;
Integer – тип данных.
Ниже приведем еще несколько примеров описания переменных:
Dim Var2 As Double
Dim Var3 As Date
Dim Var4 As Currency
Dim Var5 As Variant
В одной инструкции Dim можно описать сразу несколько переменных, разделяя их запятыми и сопоставляя каждой из них ключевое слово As и тип данных, например:
Dim Var2 As Double, Var3 As Date, _
Var4 As Currency, Var5 As Variant.
2.4. Использование переменных
Теперь посмотрим, как это сделать в программе. В процедуре ЦелаяПеременная переменная Integer применяется для задания свойства Value объекта Range.
Sub ЗадатьПеременную()
Dim Num1 As Integer
Num1 = 5
Worksheets(1).Range("A1").Value = Num1
Worksheets(1).Select
End Sub
В третьей строке переменной Numl присваивается значение 5, которое сохраняется до завершения программы. В четвертой строке приравниваем свойство Value ячейки A1 первого рабочего листа переменной Num1. В программе ПрисвоитьЗначение приведен обратный пример – переменной Num1 присваивается значение из диапазона:
Sub ПрисвоитьЗначение()
Dim Num1 As Integer
Num1 = Worksheets(1).Range("A1").Value
MsgBox Num1
End Sub
Если вы запустите эту программу в той же рабочей книге, что и ЦелаяПеременная, значение Num1 будет равно 5. В четвертой строке программы переменная использована для вывода значения в информационном окне
Таким образом, программа ПрисвоитьЗначение отображает в окне значение свойства Value диапазона A1. Этого же результата можно добиться и не используя переменную, как продемонстрировано в следующем примере:
Sub БезПеременной()
MsgBox Worksheets(1).Range("А1").Value
End Sub
2.5. Преимущества переменных
Глядя на предыдущий пример, вы, вероятно, подумали: зачем же вообще нужны переменные? Прежде всего, они облегчают написание программы, особенно когда приходится использовать некоторое значение несколько раз. Допустим, вам нужно присвоить ячейкам диапазона A1 второго, третьего и четвертого листов значение, содержащееся в этой же ячейке первого листа. Вот как будет выглядеть программа без переменных:
Sub ЗадатьЗначения()
Worksheets(2).Range("A1"). Value = Worksheets(1).Range("A1").Value
Worksheets(3).Range("A1").Value = _
Worksheets(1).Range("A1").Value
Worksheets(4).Range("A1").Value = _
Worksheets(1).Range("A1").Value
End Sub
Применение переменной и делает программу короче (по числу символов) и понятнее:
Sub ИспользованиеПеременной()
Dim Num1 As Integer
Num1 = Worksheets(1).Range("A1").Value
Worksheets(2).Range("A1").Value = Num1
Worksheets(3).Range("A1").Value = Num1
Worksheets(4).Range("A1").Value = Num1
End Sub
Переменные не только сократят код и сделают его более читаемым. Они еще и ускорят его выполнение. Программа ИспользованиеПеременной, например, работает быстрее, чем ЗадатьЗначения. О скорости расскажем чуть позже, а пока лишь заметим, что любое обращение к объекту, методу или свойству требует от Excel определенных действий и потому занимает некоторое время. В программе ЗадатьЗначения количество таких обращений можно определить по числу точек в инструкциях. В строках со второй по четвертую они использованы 12 раз, по четыре в каждой строке. В строках 3–6 программы ИспользованиеПеременной точка встречается 8 раз, по две на строку. Предположим, что на обработку каждой точки требуется одно и то же время, тогда, подсчитав, получим, что программа ИспользованиеПеременной выполняется за 2/3 времени, затрачиваемого на работу ЗадатьЗначения. Так все обстоит и в действительности. Конечно, для таких коротких примеров различие в скоростях заметить невозможно, но в длинных и сложных приложениях разница становится весьма ощутимой.