
- •Содержание
- •Раздел 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. Основные формы записи алгоритмов
- •Понятие "алгоритм"
- •Классификация алгоритмов
- •Способы записи алгоритмов
- •Запись на естественном языке
- •Изображение алгоритма в виде графических символов
- •Представление основных типов алгоритмов в виде блок-схем
Параметры и аргументы
Через список параметров осуществляется связь между вызывающей и вызываемой процедурами. Параметр описывается при объявлении процедуры и представляет собой переменную. Значение, которое будет подставлено вместо параметра при вызове процедуры, называется аргументом. Передаваемые аргументы являются позиционными, т.к. своей позицией в списке каждый аргумент должен показать, какой параметр он заменяет.
В зависимости от контекста процедуре можно передать в качестве аргументов значения переменных, выражения, константы или массивы, но обязательно тип передаваемого аргумента должен соответствовать типу параметра.
Пример
Процедура высвечивает приветствие после ввода пользователем своего имени.
' Вызываемая процедура Sub DisplayName(sName As String) MsgBox "Hello, " & sName End Sub |
sName это параметр вызываемой процедуры, а значение Conrad – аргумент.
Замечания
Идентификаторы аргументов и параметров процедуры могут совпадать.
Не имеет смысла в качестве аргументов передавать глобальные переменные, так как их значения доступны любой процедуре проекта.
Синтаксис описания каждого параметра процедуры имеет следующий вид:
[[Optional][ByVal|ByRef][ParamArray] varname[( )] As type][= defaultvalue]
Optional – ключевое слово. Указывает, что параметр может быть опущен.
Важно
Необязательные параметры всегда размещаются в конце списка.
Тип необязательного параметра – Variant.
При наличии необязательного параметра в процедуре необходимо предусмотреть использование значения по умолчанию, если значение аргумента не задано.
В процедуре можно проверить, передается необязательный параметр или нет, используя функию IsMissing(argname). Она возвращает значение True, если значение параметра опущено, и False в противном случае.
ByVal1 – передача параметра по значению. Предполагается, что при вызове процедуры передается только значение переменной и, следовательно, в процессе выполнения процедуры оно не может быть изменено. Используйте этот способ передачи аргументов, чтобы избежать случайной модификации передаваемых данных.
ByRef1 – передача параметров по ссылке. Предполагается, что процедуре передается адрес переменной. В этом случае вызывающая процедура может не только использовать переданное значение переменной, но и изменить его в процессе выполнения. Используется по умолчанию.
ParamArray означает передачу необязательного аргумента – массива типа Variant с неопределенным количеством элементов.
Важно
Ключевое слово ParamArray
используется только для последнего параметра процедуры;
позволяет задавать произвольное количество передаваемых аргументов;
не допускает использование ключевых слов ByVal, ByRef и Optional для описываемого параметра.
Varname – идентификатор переменной.
type – тип передаваемого аргумента. Если тип данных не указан, то VBA трактует аргумент как Variant.
Важно
Разрешены все элементарные типы данных и типы, определенные пользователем.
Aргумент типа String должен иметь переменную длину.
Если для параметра процедуры описан тип данных, то передаваемый аргумент должен иметь тот же тип данных.
Если параметром процедуры является массив, то передаваемый массив должен иметь ту же размерность.
Нарушение одного из перечисленных условий может вызвать ошибку выполнения. Определение типа передаваемого значения позволяет повысить эффективность программы и избежать ошибок, связанных с неверно переданным аргументом.
Value on default – для необязательных аргументов устанавливает значение по умолчанию.
В качестве передаваемых аргументов можно использовать выражения. Значение выражения вычисляется, преобразуется к корректному типу аргумента, результат временно сохраняется, а процедуре передается адрес этого временного хранилища. Очевидно, что в этом случае происходит передача аргумента по значению – ByVal.
Пример.
Для сотрудников фирмы (максимально 2000 сотрудников) рассчитать выплаты в соответствии с количеством отработанных часов и ставкой оплаты за час работы. Налог составляет 13%. Если зарплата превышает 300$, то страховой взнос составляет 5%.
Sub salary_employee() Dim h As Long, r As Long, id As Integer Dim i As Integer For i = 1 To 2000 id=Val(InputBox("Код сотрудника")) h = Val(InputBox("Enter hours")) If h = 0 Then Exit For Else r = Val(InputBox("Enter rate")) If r = 0 Then Exit For End If salary_em_proc id,h,r ‘ вызов процедуры Next i End Sub
Sub salary_em_proc (ByVal io As Integer, ByVal ho As Long, ByVal ra As Long) Dim Fund As Double, s As Double s = ho * ra If s > 300 Then Fund = s * 0.05 End If MsgBox io & " salary " & s – Fund – s * 0.13 End Sub |
Процедура salary_employee (основная) запрашивает ввод количества отработанных часов и размер почасовой оплаты максимально для 2000 сотрудников и передает по значению эти данные в процедуру salary_em_proc. Вызываемая процедура salary_em_proc рассчитывает и распечатывает денежную выплату. В вызываемой процедуре salary_em_proc определены три параметра. Это io – код сотрудника, ho – количество часов, ra – ставка почасовой оплаты.
|
Изменим задачу, чтобы показать способ передачи аргументов по ссылке. Пусть дополнительно в вызываемой процедуре будет рассчитываться суммарная выплата, значение которой в измененном виде будет доступно основной процедуре.
Sub salary_em_sum(ByVal io As Integer,ByVal ho As Long, ByVal ra As Long, ByRef SI as Double ) Dim Fund As Double, s As Double s = ho * ra If s > 300 Then Fund = s * 0.05 End If MsgBox io & " salary " & s – Fund – s * 0.13 SI=SI+ s-Fund-s*0.13 End Sub |
В основной процедуре salary_employee объявите переменную AC (Dim AC as Double), в которой будет накапливаться суммарная выплата. В вызываемой процедуре введите четвертый параметр SI – накапливаемая сумма. |
Этот параметр передается по ссылке, т.к. его значение изменяется в вызываемой процедуре. Оператор вызова процедуры будет выглядеть так: salary_em_sum id, h, r, AC.