- •Содержание
- •Раздел 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. Основные формы записи алгоритмов
- •Понятие "алгоритм"
- •Классификация алгоритмов
- •Способы записи алгоритмов
- •Запись на естественном языке
- •Изображение алгоритма в виде графических символов
- •Представление основных типов алгоритмов в виде блок-схем
Поименованные аргументы
Аргументы процедур могут задаваться двумя способами: позиционное расположение аргументов и произвольное расположение аргументов.
В первом случае VBA интерпретирует не только сами аргументы, но и порядок их расположения, предполагая, что они перечислены в соответствии с расположением формальных параметров. При пропуске необязательных аргументов необходимо "оставлять" для них место при помощи запятой, которой может предшествовать пробел.
Использование поименованных аргументов исключает влияние позиции аргумента на его интерпретацию. Для задания поименованных аргументов после названия формального параметра вызываемой процедуры поставьте оператор назначения – двоеточие и знак равенства (:=), за которым укажите передаваемое значение аргумента.
Преимущества
Поименованные аргументы улучшают читабельность программы.
Исключаются ошибки, вызванные неверным порядком аргументов.
Облегчается перечисление аргументов в случае пропуска необязательных аргументов.
Используя поименованные аргументы, к функции расчета выплат можно было бы обратиться так: salary_em(ra:=r, ho:=h).
Пример
Процедура запрашивает имя и фамилию и составляет адрес электронной почты на Yandex из первой буквы имени и фамилии полностью.
Public Sub input_named() Dim nm As String, fm As String nm = InputBox("Введи имя", , , 100, 100) fm = InputBox(prompt:="Введи фамилию", xpos:=100, ypos:=100) Debug.Print "Email=", Left(nm, 1) & fm & "@yandex.ru" End Sub
|
Функция Left выделяет первую букву имени. Подробно об аргументах функций InputBox и Left см. ниже.
Использование необязательных аргументов
Ключевое слово Optional, задаваемое при описании параметров процедуры, предполагает, что значение параметра необязательно будет передано в процедуру. Иными словами, аргумент возможен, но необязателен.
Пример
Функция рассчитывает налоговые выплаты и имеет два параметра S – доход, R – ставка налога. Если ставка налога не задана, то налог рассчитывается, исходя из 13%.
Function NS(ByRef S As Double, Optional ByRef R As Variant) As Double Dim Fund As Double If IsMissing(R) Then Fund = 0.13 Else Fund = R End If NS = S * Fund End Function |
Оператор Debug.Print NS(1000) в вызывающей процедуре распечатает в окне Immediate Window размер 13%-го налога, а оператор Debug.Print NS(1000, 0.1) выведет в это окно размер 10%-го налога от заданного дохода. |
Использование параметра ParamArray
Если количество аргументов, передаваемых вызываемой процедуре, неизвестно до момента вызова процедуры, то последний параметр в заголовке вызываемой процедуры должен быть описан как ParamArray. Тогда при вызове процедуры последний аргумент рассматривается как массив переменных типа Variant и внутри процедуры производятся действия уже с массивом.
Замечание
Используйте функцию Ubound для определения количества элементов в передаваемом массиве.
Пример
Составить функцию умножения аргументов.
Function multb(x, y) As Single multb = x * y End Function |
Для двух аргументов функция состоит из одного оператора, который перемножает аргументы. |
Для умножения произвольного количества аргументов можно предложить два варианта функций.
С вычислением верхней границы передаваемого массива |
Без вычисления верхней границы передаваемого массива |
Function multa(ParamArray x()) As Double Dim m As Double m=1 For i = 0 To UBound(x()) m = m * x(i) Next i multa = m End Function |
Function multr(args() As Variant) As Double Dim d As Variant, m As Double m = 1 For Each d In args m = m * d Next d multr = m End Function |
Напомним, что нижняя граница массива равна 0, если не указано другое.
Вызывающая процедура для обоих способов записи функции может выглядеть следующим образом:
Sub mult_arr() Dim A(7) As Variant, i As Integer For i = 0 To 7 A(i) = i + 1 Next i Debug.Print multr(A) ‘или Debug.Print multa(A) End Sub |
В процедуре создается массив из восьми чисел, элементы которого перемножаются в процедуре multr или multa. Результат умножения выводится в окно Immediate Window. |