
- •Федеральное агентство по образованию
- •Введение в vba
- •Объектно-ориентированное программирование
- •Основные понятия
- •Алфавит и словарь языка
- •Переменные
- •Константы
- •Строковые переменные
- •Массивы
- •Пользовательские типы данных
- •Операции vba
- •Объектная модель Excel
- •Свойства и методы объектов
- •Отображение объектной модели Excel
- •Иерархия объектной модели
- •Ссылка на объекты в коде vba
- •Работа с объектами
- •Задание свойств объекта
- •Использование методов объекта
- •Переменные-объекты
- •Коллекции
- •Метод Add
- •Свойство Count
- •Свойства и методы основных объектов Excel
- •Объект Application
- •Объект Worksheet
- •Объект Range
- •Просмотр объектов
- •Использование справочной системы
- •Использование функциональной клавиши f1
- •Использование помощника
- •Вывод сообщений и ввод и данных
- •Функция MsgBox
- •Функция InputBox
- •Метод InputBox
- •Объединение текстовых строк
- •Концепция событий Excel
- •Типы событий Excel
- •События объекта Workbook
- •События объекта Worksheet
- •События объекта Application
- •События объекта UserForm
- •События, не связанные с конкретными объектами
- •Метод OnKey
- •Событие OnTime
- •Формы пользователя
- •Свойства, методы и события экранных форм
- •Некоторые свойства форм
- •Некоторые методы форм
- •Некоторые события форм
- •Элементы управления
- •Элемент управления Label (Надпись)
- •Окно свойств формы
- •Элемент управления CommandButton (Кнопка)
- •Элемент управления TextBox (Текстовое поле)
- •Элемент управления ComboBox
- •Элемент управления ListBox (список)
- •Элемент управления CheckBox (Флажок)
- •Элемент управления ToggleButton (Выключатель)
- •Элемент управления OptionButton (Переключатель)
- •Элемент управления Image (Рисунок)
- •Элемент управления ScrollBar (полоса прокрутки)
- •Элемент управления SpinButton (Счётчик)
- •Элемент управления RefEdit (Поле со свёртыванием)
- •Элементы управления на рабочем листе
- •Инструкции vba
- •Оператор присваивания
- •Инструкция Set
- •Инструкция For… Next
- •Инструкция While…Wend
- •Инструкция Do... Loop
- •Инструкция For Each…Next
- •Инструкции перехода
- •Инструкция условного перехода If…Then…Else
- •Инструкция Select…Case
- •Инструкция безусловного перехода GoTo
- •Инструкции перехода к обработчику ошибок On Error
- •Инструкции прерывания выполнения блока Exit
- •Инструкция передачи управления выполнением процедуры подпрограмме внутри процедуры GoSub… Return
- •Инструкция передачи управления выполнением процедуры на одну из нескольких строк кода On…GoSub и On…GoTo
- •Функции vba
- •Встроенные функции
- •Математические функции
- •Функции преобразования данных
- •Функции даты и времени
- •Строковые функции
- •Примеры использования функций vba
- •Удаление ненужных символов
- •Определение длины строки
- •Сравнение и поиск строк
- •Функция StrComp
- •Функция InStr
- •Выделение части строки
- •Функция Left
- •Функция Right
- •Функция Mid
- •Форматирование значений данных
- •Функции, определённые пользователем
- •Пример функции
- •Файлы vba
- •Типы файлов в vba
- •Открытие и закрытие файла
- •Ввод данных в файл последовательного доступа
- •Вывод данных из файла последовательного доступа
- •Работа с файлом произвольного доступа
- •Создание процедуры
- •Выполнение процедуры
- •Сохранение процедуры
- •Запись последовательности действий пользователя
- •Просмотр кода макроса
- •Отладка программ
- •Тестирование и отладка как этап разработки приложений
- •Отладка
- •Режим останова
- •Использование окна Immediate
- •Просмотр значений в окне Immediate
- •Пошаговое выполнение программ
- •Исправление ошибок
- •Библиографический список
- •Оглавление
Сохранение процедуры
Чтобы сохранить новую процедуру, надо сохранить рабочую книгу, где находится эта процедура. Можно сохранить рабочую книгу из редактора Visual Basic. Для этого нужно:
выполнить команду File > Save Книга (Файл > Сохранить книгу). Если рабочая книга еще ни разу не сохранялась, дать ей имя;
ввести Первая в качестве имени книги и нажать клавишу Enter.
Рабочая книга, модуль и процедура будут сохранены.
Запись последовательности действий пользователя
Excel позволяет записывать последовательность действий пользователя, а затем преобразовать их в код VBA. Записанный VBA код макроса может служить основой для дальнейших разработок, а также является хорошим учебным материалом для изучения VBA. Например, чтобы узнать, как в VBA записать последовательность каких-либо действий, нужно записать макрос, выполняющий эти действия, и затем проанализировать код макроса и при необходимости внести изменения в него.
Пример
Создать макрос, используя запись последовательности действий пользователя, для решения следующей задачи.
При работе в Excel необходимо часто вводить на рабочий лист наименование и “шапку” таблицы, приведённой ниже.
Для этого нужно выполнить следудующие действия:
Выделить блок ячеек A1:D1.
Объединить ячейки блока.
Ввести наименование таблицы (слово ВЕДОМОСТЬ) шрифтом.
Ввести шапку таблицы (Фамилия И.О., №зач.кн., Дисциплина, Оценка).
Обвести рамкой каждую ячейку шапки таблицы.
Порядок записи макроса следующий.
Открыть новую рабочую книгу.
Выполнить команду Сервис > Макрос > Начать запись. Появится диалоговое окно Запись макроса, показанное ниже.
Ввести название макроса, например ВЕДОМОСТЬ_1, и щёлкнуть кнопку OK.
Выполнить действия по формированию заголовка и шапки таблицы, перечисленные выше в п.п. 1÷5
Щёлкнуть на кнопке Остановить запись одноименной панели инструментов. Сеанс записи макроса закончен.
Обычно (но не всегда!) на экране появляется панель инструментов Остановить запись.
Если эта панель не появилась, то нужно щёлкнуть правой кнопкой мыши на любой панели инструментов и в открывшемся контекстном меню панели выбрать команду Настройка, а затем в одноименном диалоговом окне в списке Панели инструментов установить флажок возле пункта Остановить запись. Как альтернативу можно выполнить команду Сервис > Макрос > Остановить макрос.
Для выполнения макроса необходимо выполнить команду Сервис > Макрос > Макросы. Отобразится диалоговое окно Макрос. Выделить макрос ВЕДОМОСТЬ_1 и щёлкнуть на кнопке Выполнить.
Можно также выполнить макрос из окна редактора VBA, используя команду Run Sub|UserForm из меню Run или щелкнуть на кнопке Run Sub|UserForm стандартной панели инструментов или нажать клавишу F5.
Просмотр кода макроса
По ходу записи макроса Excel запоминает действия пользователя и одновременно преобразует их в код VBA. Чтобы увидеть полученный код, нужно выполнить следующие действия.
Выберать команду Сервис > Макрос > Макросы. Отобразится диалоговое окно Макрос.
Выделите макрос ВЕДОМОСТЬ_1 и щёлкнуть на кнопке Изменить. Откроется окно редактора Microsoft Visual Basic, в котором отобразится код этого макроса.
Sub ВЕДОМОСТЬ_1()
'
' ВЕДОМОСТЬ_1 Макрос
' Макрос записан 15.06.2009 (VAM)
'
Range("A1:D1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("A1:D1").Select
ActiveCell.FormulaR1C1 = "ВЕДОМОСТЬ"
With ActiveCell.Characters(Start:=1, Length:=9).Font
.Name = "Arial Cyr"
.FontStyle = "полужирный"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Range("A2").Select
ActiveCell.FormulaR1C1 = "Фамилия И.О."
Range("B2").Select
ActiveCell.FormulaR1C1 = "№зач.кн."
Range("C2").Select
ActiveCell.FormulaR1C1 = "Дисциплина"
Range("D2").Select
ActiveCell.FormulaR1C1 = "Оценка"
Range("A2:D2").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End Sub
Количество строк в коде макроса не соответствует тому незначительному количеству действий, которые совершены при записи макроса. Дело в том, что хотя устанавливался только формат шрифта и вид рамки ячеек, в коде макроса сохранена вся информация, представленная кнопкой Ж выбора шрифта панели инструментов и характеристикой границы ячеек. Кроме того, здесь используется относительная адресация ячеек, для которой необходимо выделять ячейки.
В приведённом ниже макросе ВЕДОМОСТЬ_2 удалена вся лишняя информация и изменён способ адресации ячеек, что привело к значительному уменьшению макроса и увеличению его наглядности. Это оказалось проще, чем разрабатывать макрос на пустом месте.
Sub ВЕДОМОСТЬ_2()
'
' ВЕДОМОСТЬ Макрос
' Макрос записан 15.06.2009 (VAM)
Range("A1:D1").Select
Selection.HorizontalAlignment = xlCenter
Selection.Merge
ActiveCell.FormulaR1C1 = "ВЕДОМОСТЬ"
With ActiveCell.Characters(Start:=1, Length:=9).Font
.FontStyle = "полужирный"
End With
Range("A2") = "Фамилия И.О."
Range("B2") = "№Зач.кн."
Range("C2") = "Дисциплина"
Range("D2") = "Оценка"
Range("A2:D2").Select
Selection.Borders(xlEdgeLeft).Weight = xlThin
Selection.Borders(xlEdgeTop).Weight = xlThin
Selection.Borders(xlEdgeBottom).Weight = xlThin
Selection.Borders(xlEdgeRight).Weight = xlThin
Selection.Borders(xlInsideVertical).Weight = xlThin
End Sub