- •Содержание
- •Раздел 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. Основные формы записи алгоритмов
- •Понятие "алгоритм"
- •Классификация алгоритмов
- •Способы записи алгоритмов
- •Запись на естественном языке
- •Изображение алгоритма в виде графических символов
- •Представление основных типов алгоритмов в виде блок-схем
Функции Hour, Minute, Second
Функции Hour, Minute, Second выделяют из заданного времени часы, минуты и секунды соответственно.
Пример
Процедура выполняется заданное количество секунд.
Sub start_stop() Dim startTime As Date, stopTime As Date Dim t As Integer, h As Integer, m As Integer, s As Integer t = InputBox("Введите время выполнения программы в сек – 2,3,4") startTime = Time h = Hour(startTime) m = Minute(startTime) s = Second(startTime) + t stopTime = TimeSerial(h, m, s) Do If Time > stopTime Then Exit Do End If Loop While s > 0 Beep End Sub |
В процессе выполнения программы текущее время сравнивается со временем завершения программы. Если оно превышено, то процедура завершается.
Оператор Beep, записанный в конце процедуры, вызывает однократное звучание сигнала.
Раздел 6.Объекты ms Excel
Все офисные приложения можно рассматривать как совокупность объектов. Объектами являются сами приложения Application (центральный или корневой объект) и их компоненты (вложенные объекты).
Примеры объектов: рабочий лист Worksheet, рабочая книга Workbook, диаграмма Chart, рамка Border. Доступ к интервалам ячеек возможен только как к объектам Range, например, объект Range("A1") представляет ячейку A1. Каждый элемент меню, каждая командная кнопка, любой элемент рабочего листа являются объектами MS Excel.
С точки зрения программирования в среде VBA объект обладает свойствами и методами. Свойства описывают объект, а методы позволяют управлять объектом.
В VBA возможны три типичные действия c объектами:
проверка свойств объекта;
изменение объекта посредством модификации его свойств;
выполнение методов объекта.
Подробно структура объектов, синтаксис свойств и методов, перечень событий рассмотрены. в разделе Microsoft Excel Object Model книги с названием Microsoft Excel Visual Basic Reference справочника по VBA (Help).
Свойства объектов
Свойства объекта это атрибуты объекта. Каждый объект может иметь десятки свойств, например, объект Worksheet имеет 52 свойства.
Свойства делятся на две группы:
свойства-участники(accessors), представляющие вложенные объекты,
терминальные свойства (terminals), задающие характеристики объекта или его состояние.
Свойства-участники позволяют добраться до объекта, находящегося на любом уровне вложенности. Например, в записи Application.ActiveWorkbook свойство ActiveWorkbook позволяет получить доступ к объекту приложения – активной рабочей книге, а в записи ActiveWorkbook.ActiveSheet свойство ActiveSheet означает доступ к объекту рабочей книги – активной странице этой книги.
Изменение значений терминальных свойств – это один из способов изменить внешний объекта.
Свойства имеют статус:
Read-Write (далее R/W) предполагает возможность изменения свойства;
Read-Only (далее R/O) означает, что можно только протестировать значение свойства.
Статус и типы значений свойств объектов можно уточнить, используя справочную систему (Help или Object Browser). Некоторые свойства являются общими для многих объектов и для разных объектов могут иметь разный статус, например, Height, Width, являющиеся свойствами интервалов, окон и приложения. В дальнейшем указывается статус и тип значения свойства.
В качестве значений свойств могут использоваться константы с префиксом xl, например, константа xlCalculationManual устанавливает ручной пересчет таблицы.
Примеры часто используемых свойств различных объектов
Свойство |
Объект |
Примеры |
Описание |
Bold, Italic (R/W Boolean) |
Font |
ActiveCell.Font.Bold=True ActiveCell.Font. Italic =False |
Устанавливает полужирный шрифт или курсив |
Column, Row (R/W Long) |
Range |
Debug.Print Range("A1:B5").Column, Range("A1:B5").Row |
Номер первой колонки (первой строки) интервала ячеек. Печатает 1, 1 |
ColumnWidth (R/W Variant) |
Range |
Range("A1:B5").ColumnWidth=15 |
Ширина каждой колонки объекта Range 15 символов |
Height, Width (Double) |
Многие объекты |
Application.Width=200 (статус R/W) W=Range("A1:B5"). Height (статус R/O) |
Ширина окна приложения 200 пт. Возвращает суммарную высоту строк объекта Range в пунктах |
RowHeight (R/W Variant) |
Range |
Range("A1:B5").RowHeight=15
|
Устанавливает высоту каждой строки объекта Range в пунктах |
Formula (R/W Variant) |
Range |
Range("A2").Formula = "=pi()*A1^2" |
Формула ячейки |
Value (R/W Variant) |
Range |
Range("A3").Value=6.28 |
Значение ячейки |
Count (R/O Long) |
Группа объектов |
N=Sheets.Count |
Количество элементов в коллекции объектов |
Name (String) |
Многие объекты |
ActiveSheet.Name="Nw_Sh"(статус R/W) Wb =ActiveWorkbook.Name(статус R/O) |
Имя объекта |
Parent (R/O Object) |
Многие объекты |
P_t= Range("A1:B5").Parent для объекта Range возвращает объект Sheet – рабочий лист, на котором объект Range расположен |
Возвращает объект обычно другого типа, который является объектом более высокого уровня по отношению к указанному объекту |
Свойства объектов изменяются при помощи оператора присваивания или под влиянием методов.
Синтаксис операторов присваивания object.property=expression
object – ссылка на объект, над которым совершается действие;
property – название свойства, значение которого необходимо изменить;
expression – выражение, представляющее новое значение свойства объекта.
Важно
Каждое свойство может принимать значения только определенного типа.
Тип результата вычисления выражения должен соответствовать типу свойства.
Если свойство является числовым, то и результат вычисления выражения должен быть числом или должен преобразовываться в число.
Например, оператор ActiveCell.Font. Bold="b" является ошибочным, так как свойство Bold имеет тип Boolean и может только принимать значения True или False.
Пример
Процедура изменяет размеры активного окна приложения.
Sub NewWindowsize() Dim Wsize As Integer, Hsize As Integer Wsize = InputBox("Введите ширину окна от 100 до 200") Hsize=InputBox("Введите высоту окна от 100 до 200") ActiveWindow.Height=Hsize ActiveWindow.Width=Wsize End Sub |
Ширина и высота окна приложения вводятся в диалоге. Свойства Height и Width для объекта Window имеют статус R/W. |
При помощи оператора присваивания можно сохранить значение свойства в переменной. Значение свойства может использоваться как часть условного выражения. В таких случаях говорят о возврате значения свойства.
Синтаксис оператора, возвращающего значение свойства
variable=object.property
variable – переменная или свойство некоторого объекта;
object – ссылка на объект, свойство которого запоминается или тестируется;
property – название свойства, значение которого необходимо получить.
Важно
Тип переменной должен соответствовать типу значения свойства.
Примеры
В процедуре распечатывается название рабочего листа c активной ячейкой.
Sub parent_name()
Range("C5").Activate
MsgBox ActiveCell.Parent.Name
End Sub
Свойство Parent возвращает рабочий лист, на котором расположена активная ячейка.
В зависимости от знака числа, хранящегося в ячейке, залить ячейку некоторым цветом.
Sub Range_if() If Range("A1").Value<0 Then Range("A1").Interior.ColorIndex = 5‘индекс синего цвета Elseif Range("A1").Value=0 Then Range("A1").Interior.ColorIndex = xlNone Else Range("A1").Interior.ColorIndex = xlAutomatic End If End Sub |
В процедуре тестируется свойство Value объекта Range – ячейки A1. В случае отрицательного числа цвет заливки ячейки – синий. |
При нулевом значении заливка ячейки отменяется (константа xlNone). При положительном значении устанавливается цвет заливки, предусмотренный по умолчанию (константа xlAutomatic).