- •1.Программирование в vba. Объекты Application, Workbook, Worksheet и Range
- •2.Редактор Visual Basic
- •2.1.Запуск программы
- •2.1.1.Панель инструментов Стандарт
- •2.2.Отладка программ
- •2.2.1.Ошибки при написании программ
- •2.2.1.1.Ошибки компиляции
- •2.2.1.2.Ошибки выполнения
- •2.2.2.Инструкция Option Explicit
- •2.2.3.Пошаговое выполнение программ
- •2.2.4.Точка останова (Toggle Breakpoint)
- •2.2.5.Отслеживание значений свойств и переменных
- •3.Объекты Application, Workbook, Worksheet и Range. Встроенные функции Dir, MkDir, MsgBox, InputBox
- •3.1.Программа СлучайныеЧисла
- •3.2.Программа УдалениеКниги
- •3.3.Программа СлучайныеЧислаОформление
- •4.Переменные
- •4.1.Объектные переменные
- •4.2.Пользовательский тип данных
- •5.Массивы
- •5.1.1.Функция Erase
- •5.1.2.Функции lBound и uBound
- •6.Подпрограммы. Функции. Область видимости переменных, подпрограмм и функций.
- •6.1.Вызов подпрограммы
- •6.2.Передача данных при вызове программы
- •6.2.1.Передача по ссылке и по значению
- •6.3.Функции
- •6.4.Область видимости переменных
- •6.4.1.Переменные уровня процедуры
- •6.4.2.Переменные уровня модуля
- •6.4.3.Переменные уровня проекта
- •6.4.4.Сохраняемые переменные
- •6.4.5.Область видимости подпрограмм и функций
- •6.4.6.Сохраняемые подпрограммы и функции
- •7.Управляющие структуры: If-Then-Else, Select Case, For-Next, While-Wend, Do-Loop, For-Each-Next
- •8.Инструкция With
- •9.Встроенные функции vba
- •9.1.Математические функции
- •9.2.Функции проверки типов
- •9.3.Функции преобразования форматов
- •9.4.Функции обработки строк
- •9.5.Функции времени и даты
- •10.Обработка ошибок: инструкция On Error
- •11.Пользовательский интерфейс
- •11.1.Создание формы (UserForm) и добавление кнопок (СоmmandButton)
- •11.2.Вывод формы на экран (запуск формы)
- •11.3.Поле (TextBox) и надпись (Label).
- •11.4.Список (ListBox) и поле со списком (ComboBox)
- •11.4.1.Список (ListBox)
- •11.4.2.Определение выбранных элементов списка
- •11.4.3.Поле со списком (ComboBox)
- •11.4.4.Определение выбранного элемента
- •11.4.5.Создание взаимосвязанных элементов управления
- •11.5.Флажок (CheckBox)
- •11.6.Выключатель (ToggleButton)
- •11.7.Переключатель (OptionButton)
- •11.8.Счетчик (SpinButton)
- •11.9.Создание нестандартных меню и панелей инструментов.
- •11.9.1.Пример создания/удаления панели инструментов
- •11.9.2.Пример создания/удаления меню
- •12.События объектов Workbook и Worksheet
- •12.1.События объекта Workbook
- •12.2.События объекта Worksheet
- •Домашнее задание №1
- •Домашнее задание №2 и №3. Типовые варианты.
- •Вариант 1. Домашнее задание №2
- •Списочный состав института
- •Домашнее задание №3
- •Вариант 2. Домашнее задание №2
- •Списочный состав института
- •Домашнее задание №3
- •Вариант 3. Домашнее задание №2
- •Домашнее задание №3
- •Вариант 4. Домашнее задание №2
- •Домашнее задание №3
- •Вариант 5. Домашнее задание №2
- •Домашнее задание №3
6.2.1.Передача по ссылке и по значению
Передача аргументов из одной программы в другую осуществляется двумя способами — по ссылке (by reference) и по значению (by value). В первом случае передается сама переменная, поэтому ее значение в подпрограмме можно изменить. Во втором случае — только значение переменной, а не она сама, и изменить ее в вызванной подпрограмме нельзя.
Выбор способа передачи осуществляется ключевыми словами ByRef и ByVal, которые в круглых скобках указываются в описании вызываемой подпрограммы.
В Модуль5 наберите и протестируйте работу следующих программ:
Пример передачи переменной UserName по ссылке с одним и тем же именем переменной (подпрограмма вызывается только для одной переменной):
Sub ПередачаАргументаПоСылке ()
Dim UserName As String
UserName = "Иван"
ChangeName UserName
MsgBox UserName
End Sub
Sub ChangeName (ByRef UserName)
UserName = "Петр"
End Sub
Пример передачи переменной по ссылке с разными именами (одна и та же подпрограмма вызывается для разных переменных):
Sub ПередачаАргументаПоСсылке_РазныеПеременные ()
Dim UserName As String
UserName = "Иван"
ChangeName2 UserName
MsgBox UserName
End Sub
Sub ChangeName2(ByRef NewName)
NewName = "Петр"
End Sub
Пример передачи переменной по значению (в подпрограмму передается только её значение):
Sub ПередачаАргументаПоЗначению()
Dim UserName As String
UserName = "Иван"
ChangeName3 UserName
MsgBox "В исходной программе имя осталось прежним " _
& UserName
End Sub
Sub ChangeName3(ByVal UserName)
MsgBox "Сначала был " & UserName & "."
UserName = "Петр"
MsgBox "В вызванной подпрограмме имя стало " & UserName
End Sub
6.3.Функции
Отличие функции от подпрограммы:
Функция начинается ключевым словом Function и заканчивается ключевыми словами End Function.
Функцию можно вызывать из формулы, введенной в ячейку.
Функция может возвращать значение в вызывающую программу или формулу.
Рассмотрим пример функции Multiply, вычисляющей произведение двух чисел.
Sub ВызовФункции()
Dim Var1 As Integer
Dim Var2 As Integer
Dim Var3 As Integer
Var1 =5
Var2 = 10
Var3 = Multiply(Var1, Var2)
MsgBox Var3
End Sub
Function Multiply(ByVal Var1, ByVal Var2)
Multiply = Var1 * Var2
End Function
6.4.Область видимости переменных
Как вы знаете, в VBA переменные имеют три уровня видимости: процедуры, модуля, проекта (или общий уровень), которые в равной степени относятся и к одиночным переменным, и к массивам.
В Модуль5 наберите и протестируйте работу представленных ниже программ.
6.4.1.Переменные уровня процедуры
Следующий пример демонстрирует переменную, объявленную на уровне процедуры – любая попытка использовать переменную Var1 вне этой процедуры приведет к ошибке.
Sub ПеременныеУровняПроцедуры ()
Dim Var1 As Integer
Var1 =55
MsgBox Var1
DisplayMessage
End Sub
Sub DisplayMessage()
MsgBox Var1
End Sub
Чтобы исходное значение Varl (55) было доступно в DisplayMessage, придется либо передать его в качестве аргумента, либо расширить область видимости этой переменной.
6.4.2.Переменные уровня модуля
Переменную уровня модуля можно использовать в любой подпрограмме или функции того модуля, где эта переменная была определена. Чтобы сделать переменную доступной на уровне модуля, объявите её перед любыми подпрограммами и функциями, как показано в примере:
Dim Var2 As String
Sub ПеременнаяУровняМодуля()
Var2 = "Привет!"
DisplayMessage2
End Sub
Sub DisplayMessage2()
MsgBox Var2
End Sub
