- •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
5.1.1.Функция Erase
Она используется для удаления данных, хранимых в элементах массива. Если это массив фиксированного размера, функция Erase лишь очищает его, а память, выделенная массиву, остается за ним. Динамический массив уничтожается функцией Erase полностью. Программа ФункцияErase демонстрирует удаление всех значений, записанных в массив фиксированного размера.
Sub ФункцияErase()
Dim Data7(2) As Integer
Data7(1) = Int(100 * Rnd())
Data7(2) = Int(100 * Rnd())
MsgBox "Лотерейные номера: " & Data7(1) & ", " & Data7(2)
Erase Data7
MsgBox "Лотерейные номера: " & Data7(1) & ", " & Data7(2)
End Sub
Здесь элементам массива присваиваются значения и выводятся в информационном окне. Затем для удаления содержимого массива вызывается функция Erase. Второй вызов функции MsgBox свидетельствует, что во всех элементах Data7 содержатся нули. В следующем примере показан вызов функции Erase для динамического массива.
Sub EraseДинамичМассив()
Dim Data8() As Integer
ReDim Data8(2)
Data8(1) = Int(100 * Rnd())
Data8(2) = Int(100 * Rnd())
MsgBox "Лотерейные номера: " & Data8(1) & ", " & Data8(2)
Erase Data8
MsgBox "Лотерейные номера: " & Data8(1) & ", " & Data8(2)
End Sub
Выполнение программы EraseДинамичМассив приводит к ошибке в строке 8, потому что функция Erase в предыдущей строке освободила всю память, занятую динамическим массивом. После этого VBA уже не может работать с индексами Data8, и обращение к этому массиву вызывает ошибку.
5.1.2.Функции lBound и uBound
Эти функции помогут вам определить верхнюю и нижнюю границы индексов массива:
Sub Lbound_UBound()
Dim Data10(4 To 15) As Integer
MsgBox "Нижняя граница массива" & LBound(Datal0) & "."
MsgBox "Верхняя граница массива " & UBound(Datal0) & "."
End Sub
Замечание:
Применение этих функций к обычной переменной или динамическому массиву, не описанному инструкцией ReDim, вызывает ошибку при выполнении программы. Чтобы избежать этого, перед вызовом функций LBound и UBound проверьте переменную функцией IsArray (см. курс лекций).
6.Подпрограммы. Функции. Область видимости переменных, подпрограмм и функций.
6.1.Вызов подпрограммы
В VBA допускается вызов одной программы (подпрограммы) из другой, что позволяет разделять код на логически обособленные фрагменты. Использование подпрограмм дает нам следующие преимущества:
Мы можем вызывать один и тот же код из разных программ, передавая в него свои данные. Понятно, что при этом облегчается редактирование кода, поскольку все изменения вносятся только однажды.
Код VBA, разделенный на подпрограммы, обретает четкую логическую структуру; его легче разрабатывать, отлаживать и обслуживать.
Фрагментируя код, обязательно руководствуйтесь правилами логики. Одна подпрограмма должна отвечать за выполнение одной операции.
В Модуль5 наберите и протестируйте работу следующих программ:
Пример вызова подпрограммы DisplayMessage без передачи данных:
Sub ВызовПодпрограммы()
Dim Range1 As Range
Set Range1 = Worksheets(1).Range("A1")
Range1.Value = 500
DisplayMessage
End Sub
Sub DisplayMessage()
MsgBox "Данные введены!"
End Sub
Пример вызова подпрограммы, которая хранится в другом модуле (в Модуль3):
Sub ВызовПодпрограммы()
Dim Range1 As Range
Set Range1 = Worksheets(1).Range("A1")
Range1.Value = 500
Модуль3.DisplayMessage
End Sub
Sub DisplayMessage()
MsgBox "Данные введены!"
End Sub
Следующий пример мы выполним вместе. Модернизируем программу СлучайныеЧисла следующим образом: оформление заполненных ячеек «поручим» подпрограмме Оформление. Получим следующий код:
|
|
Sub СлучайныеЧисла() |
|
|
Dim СлучЧисло As Integer |
|
|
Dim Листов As String |
|
|
Листов = Application.SheetsInNewWorkbook |
|
|
Application.SheetsInNewWorkbook = 1 |
|
|
Workbooks.Add |
|
|
ActiveSheet.Name = "Случ. числа" |
|
|
For i = 1 To 10 |
|
|
СлучЧисло = Int(100 * Rnd()) |
|
|
Cells(i, 1).Value = СлучЧисло |
|
|
Next i |
|
|
'Вызов подпрограммы Оформление: |
|
|
Оформление |
|
|
Sheets.Add After:=Worksheets(Worksheets.Count) |
|
|
Worksheets(1).Select |
|
|
Range("A1").Select |
|
|
Application.SheetsInNewWorkbook = Листов |
|
|
ActiveWorkbook.SaveAs Filename:="C:\St\Случайные числа.xls" |
|
|
MsgBox "Случайные числа разыграны!" |
|
|
End Sub |
Сравните полученный код с программой СлучайныеЧислаОформление – он гораздо легче для восприятия.
Замечание:
При вызове подпрограммы можно использовать другой синтаксис. Так, 31-ю строку можно записать в виде:
Call Оформление
