- •2.1. Алфавит и словарь языка
- •2.2. Переменные
- •2.3. Константы
- •2.4. Строковые переменные
- •2.5. Массивы
- •2.6. Пользовательские типы данных
- •2.7. Операции VBA
- •2.8. Объектная модель Excel
- •2.8.1. Свойства и методы объектов
- •2.8.2. Отображение объектной модели Excel
- •2.8.2.1. Иерархия объектной модели
- •2.8.2.2. Ссылка на объекты в коде VBA
- •2.8.3. Работа с объектами
- •2.8.3.1. Задание свойств объекта
- •2.8.3.2. Использование методов объекта
- •2.8.3.3. Переменные-объекты
- •2.8.3.4. Коллекции
- •2.8.3.5. Метод Add
- •2.8.3.6. Свойство Count
- •2.8.4. Свойства и методы основных объектов Excel
- •2.8.4.1. Объект Application
- •2.8.4.2. Объект Worksheet
- •2.8.4.3. Объект Range
- •2.8.5. Просмотр объектов
- •2.8.6. Использование справочной системы
- •2.8.6.1. Использование функциональной клавиши F1
- •2.8.6.2. Использование помощника
- •2.9. Ввод и вывод данных
- •2.9.3. Метод InputBox
- •2.9.4. Объединение текстовых строк
- •2.10. Концепция событий Excel
- •2.10.1. Типы событий Excel
- •2.10.2. События объекта Workbook
- •2.10.3. События объекта Worksheet
- •2.10.4. События объекта Application
- •2.10.5. События объекта UserForm
- •2.10.6. События, не связанные с конкретными объектами
- •2.10.6.1. Метод OnKey
- •2.10.6.2. Событие OnTime
- •2.11. Формы пользователя
- •2.11.1. Свойства, методы и события экранных форм
- •2.11.1.1. Некоторые свойства форм
- •2.11.1.2. Некоторые методы форм
- •2.11.1.3. Некоторые события форм
- •2.11.2. Элементы управления
- •2.11.2.1. Элемент управления Label (Надпись)
- •2.11.2.1.1. Окно свойств формы
- •2.11.2.2. Элемент управления CommandButton (Кнопка)
- •2.11.2.3. Элемент управления TextBox (Текстовое поле)
- •2.11.2.4. Элемент управления ComboBox (комбинированный список)
- •2.11.2.5. Элемент управления ListBox (список)
- •2.11.2.6. Элемент управления CheckBox (Флажок)
- •2.11.2.7. Элемент управления ToggleButton (Выключатель)
- •2.11.2.8. Элемент управления OptionButton (Переключатель)
- •2.11.2.9. Элемент управления Image (Рисунок)
- •2.11.2.12. Элемент управления RefEdit (Поле со свёртыванием)
- •2.11.2.13. Элементы управления на рабочем листе
- •2.12. Инструкции VBA
- •2.12.1. Оператор присваивания
- •2.12.2. Инструкция Set
- •2.12.3. Циклы
- •2.12.3.1. Инструкция For… Next
- •2.12.3.2. Инструкция While…Wend
- •2.12.3.3. Инструкция Do... Loop
- •2.12.3.4. Инструкция For Each…Next
- •2.12.4. Инструкции перехода
- •2.12.4.1. Инструкция условного перехода If…Then…Else
- •2.12.4.2. Инструкция Select…Case
- •2.12.4.3. Инструкция безусловного перехода GoTo
- •2.12.4.4. Инструкции перехода к обработчику ошибок On Error
- •2.12.4.5. Инструкции прерывания выполнения блока Exit
- •2.13. Функции VBA
- •2.13.1. Встроенные функции
- •2.13.1.1. Математические функции
- •2.13.1.2. Функции преобразования данных
- •2.13.1.3. Функции даты и времени
- •2.13.1.4. Строковые функции
- •2.13.1.5. Примеры использования функций VBA
- •2.13.1.5.1. Удаление ненужных символов
- •2.13.1.5.2. Определение длины строки
- •2.13.1.5.3. Сравнение и поиск строк
- •2.13.1.5.4. Выделение части строки
- •2.13.1.5.5. Форматирование значений данных
- •2.13.2. Функции, определённые пользователем
- •2.14. Файлы VBA
- •2.14.1. Типы файлов в VBA
- •2.14.2. Открытие и закрытие файла
- •2.14.3. Ввод данных в файл последовательного доступа
- •2.14.4. Вывод данных из файла последовательного доступа
- •2.14.5. Работа с файлом произвольного доступа
- •2.15. Создание процедуры
- •2.16. Выполнение процедуры
- •2.17. Сохранение процедуры
- •2.18. Запись последовательности действий пользователя
- •2.19. Просмотр кода макроса
- •3.1. Тестирование и отладка как этап разработки приложений
- •3.1.1. Отладка
- •3.1.1.1. Режим останова
- •3.1.1.2. Использование окна Immediate
- •3.1.1.2.1. Просмотр значений в окне Immediate
- •3.1.1.3. Пошаговое выполнение программ
- •3.1.2. Исправление ошибок
- •Библиографический список
- •Оглавление
120
панели выбрать команду Настройка, а затем в одноименном диалоговом окне в списке Панели инструментов установить флажок возле пункта Остановить запись. Как альтернативу можно выполнить команду Сервис
> Макрос > Остановить макрос.
Для выполнения макроса необходимо выполнить команду Сервис > Макрос > Макросы. Отобразится диалоговое окно Макрос. Выделить макрос ВЕДОМОСТЬ_1 и щёлкнуть на кнопке Выполнить.
Можно также выполнить макрос из окна редактора VBA, используя команду Run Sub|UserForm из меню Run или щелкнуть на кнопке Run Sub|UserForm стандартной панели инструментов или нажать клавишу F5.
2.19. Просмотр кода макроса
По ходу записи макроса Excel запоминает действия пользователя и одновременно преобразует их в код VBA. Чтобы увидеть полученный код, нужно выполнить следующие действия.
1.Выберать команду Сервис > Макрос > Макросы. Отобразится диалоговое окно Макрос.
2.Выделите макрос ВЕДОМОСТЬ_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
121
.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
122
Количество строк в коде макроса не соответствует тому незначительному количеству действий, которые совершены при записи макроса. Дело в том, что хотя устанавливался только формат шрифта и вид рамки ячеек, в коде макроса сохранена вся информация, представленная кнопкой Ж выбора шрифта панели инструментов и характеристикой границы ячеек. Кроме того, здесь используется относительная адресация ячеек, для которой необходимо выделять ячейки.
В приведённом ниже макросе ВЕДОМОСТЬ_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
3.Отладка программ
Вредакторе VBA имеется большой набор инструментов и средств для тестирования и отладки разрабатываемых приложений.
Вэтом пункте рассматриваются следующие вопросы.
Тестирование и отладка программ.
Остановка выполнения приложений.
Использование окна Immediate.
Пошаговое выполнение процедур.
Отслеживание значений переменных и свойств.