VBA. Практическое программирование
.pdf
Отладка программ
Dim Pro (1 To 15, 1 To 10) As Single
Заполнение массива.
For K = 1 To 15
For J = 1 To 10
Pro(K, J) = K * J
Next J
Next K
End Sub
В VBA максимальная размерность массива — 60.
Отладка программ
Если бы все программировали идеально, то необходимость; отладки программ отпала бы сама собой: каждая создаваемая программа выполняла бы все требуемые действия с первого раза. Как известно, такого не бывает, поэтому каждая среда программирования имеет инструменты, с помощью которых можно решить проблемы, возникающие в процессе программирования. В VBA также есть средства, которые позволяют исключить ошибки при разработке программ.
Отладка программ — это проверка и внесение исправлений в программу при ее разработке. Отладка позволяет идентифицировать ошибки, допущенные при программировании, например, орфографические ошибки в инструкциях, именах функций и переменных, а также логические ошибки.
Все ошибки, возникающие при программировании можно отнести к трем категориям:
Ошибки компиляции возникают, если VBA не может интерпретировать введенный текст, например, при использовании неправильного синтаксиса инструкции или задании неверного имени метода или свойства. Некоторые ошибки компиляции обнаруживаются при вводе инструкции, а другие перед выполнением программы. Данный тип ошибок обыч- но просто идентифицировать и исправить, поскольку VBA выявляет их автоматически, а сами ошибки очевидны.
Ошибки выполнения возникают при выполнении программы, т. е. после успешной компиляции. Причиной таких ошибок может быть отсутствие данных, или неправильная
51
1. Основы VBA
информация, например, данные, введенные пользователем. Ошибки выполнения, как и ошибки компиляции легко идентифицируются VBA. При этом выводится инструкция, при выполнении которой произошла ошибка. Ошибки данного типа тяжелее устранить: может понадобиться вывести значения переменных или свойств, а также другие данные, которые влияют на успешное выполнение программы.
Логические ошибки трудно заметить и устранить. Логиче- ские ошибки не приводят к прекращению компиляции или выполнения. Однако они являются причиной того, что программа не выдает желаемых результатов. Ошибки данного типа идентифицируются путем тщательной проверки с помощью средств отладки VBA.
Обратите внимание, что если возникает ошибка выполнения, то исполнение макроса прерывается и выводится стандартное сообщение, которое пользователю весьма не просто понять. Однако самое главное — макрос не доводит до завершения операцию, для выполнения которой он предназначен. Хотя и невозможно предотвратить возникновение всех возможных ошибок, следует стремиться к уменьшению их числа. В маленьком макросе довольно просто выявить ошибку. Однако по мере увеличения размеров и сложности программ, а также добавления новых переменных и процедур, становится труднее и труднее находить ошибки, В этом случае необходимо воспользоваться средствами отладки VBA.
Одним из самых простых инструментов, используемых для предотвращения множества ошибок в приложениях VBA, является инструкция Option Explicit. Данная инструкция определяет необходимость явного задания переменных в программах. Хотя ко- му-то может показаться, что можно обойтись без инструкции Option Explicit, лучше все-таки использовать ее, т. к. она имеет следующие достоинства:
Если неправильно указать имя описанной переменной, то при компиляции макроса возникает ошибка. Сообщение об ошибке использования необъявленной переменной является знаком того, что в имени переменной допущена орфографическая ошибка или что переменная не описана. В любом случае такой недочет нетрудно исправить.
Для определения ошибок редактор VBA позволяет выполнять процедуры в пошаговом режиме. Чтобы выполнить инструкции в пошаговом режиме, можно воспользоваться командами меню
52
Отладка программ
«Debug» («Отладка»). Меню «Debug» включает команды и комбинации клавиш, с помощью которых можно выполнить программу
âпошаговом режиме Дли выполнения программы в пошаговом режиме чаще всего используется команда «Step Into» («Шаг с заходом»), которая позволяет выполнить одну строку программы и перейти к следующей.
Отладка программ в Visual Basic выполняется главным образом
âрежиме прерывания. Переход в данный режим выполняется:
При нажатии кнопки Debug в окне сообщения об ошибке выполнения.
При прерывании работы макроса с помощью комбинации клавиш <Ctrl>+<Break>. Текущая инструкция выделяется в окне модуля:
По достижении точки останова.
По достижении инструкции Stop
При пошаговом.выполнении программы
При возникновении событий Break When: True è Break When Changed
В режиме прерывания, можно:
Вывести значение переменной или свойства.
Вычислить выражение в окне отладки.
Сбросить выполнение процедуры.
Выполнить процедуру в пошаговом режиме.
Одной из наиболее полезных возможностей в режиме прерывания является вывод значений переменных процедур и свойств используемых объектов. Это происходит в случае, если навести курсор на имя переменной в окне кода. Если известны ожидаемые величины, то можно сравнить их с полученными значениями. Также полезным является возможность остановить выполнение программы в какой-нибудь строке и дальше работать в пошаговом режиме. Установка и удаление точек прерывания реализуется командами отладки «Toggle Breakpoints» («Установить точку прерывания») и «Clear All Breakpoint» («Убрать все точки прерывания»).
53
2.Особенности применения VBA
âофисных приложениях или «Быстрое»
программирование
Основные объекты электронной таблицы Excel
Объектно ориентированное программирование предполагает использование свойств объектов и событий происходящих на объектах или с ними. Поэтому вначале мы посмотрим на основные объекты электронной таблицы с точки зрения возможности их применения. Основной объект — само «Приложение» («Application»). В тот момент, когда мы открывает на компьютере электронную таблицу (не открывая еще ни одной рабочей книги), мы начинаем работу с этим объектом. Как правило, ЭТ обычно открывается вместе с рабочей книгой (файлом с расширеиием .xls). Это означает, что происходит открытие объекта «Рабочая книга» («Workbook»). Для этого объекта существует ряд событий, которые мы уже можем использовать. Эти события представлены в таблице 6.
Таблица 2.1 События «Рабочей книги» («Workbook»)
Activate |
Книга стала активной |
|
|
BeforeClose |
Происходит перед закрытием книги |
|
|
BeforeSave |
Происходит перед сохранением книги |
|
|
Deactivate |
Книга перестала быть активной |
|
|
Open |
Книга открыта |
|
|
SheetCalculate |
Выполнен персчет листа книги |
|
|
SheetDeactivate |
Лист книги перестал быть активным |
|
|
WindowActivate |
Окно стало активным |
|
|
WindowDeactivate |
Окно перестало быть активным |
|
|
WindowResize |
Размеры окна изменились |
|
|
|
|
Из свойств «Рабочей книги» выделим следующие (Таблица 2.2)
54
|
Основные объекты электронной таблицы Excel |
|
|
|
Таблица 2.2 |
|
Основные свойства «Рабочей книги |
|
|
FullName |
Полное имя файла, в котором хранится книга |
|
|
Name |
Только имя файла |
|
|
Names |
Коллекция всех определенных имен ячеек и диапазонов |
|
|
Path |
Путь, где находится имя файла |
|
|
Sheets |
Коллекция всех листов книги |
|
|
Styles |
Коллекция стилей, присоединенных к книге |
|
|
|
|
И в табл. 2.3 Вы можете познакомиться основными методами.
|
Таблица 2.3 |
|
|
Основные методы для «Рабочей книги» |
|
|
|
|
Activate |
|
Делает активным окно книги |
|
|
|
Close |
|
Закрывает книгу |
|
|
|
Protect |
|
Защищает книгу от внесения изменений с помощью |
|
|
пароля |
|
|
|
Save |
|
Сохраняет файл |
|
|
|
SaveAs |
|
Сохраняет файл под заданным именем |
|
|
|
Unprotect |
|
Снимает защиту с книги |
|
|
|
|
|
|
Рабочая книга включает в себя коллекцию объектов «Лист книги» («Worksheet»). Заметим, что имя коллекции «Worksheets», и у коллекции, как у отдельного объекта есть свои свойства и методы.
Основные события для «Листа книги» — Activate (Лист стал активным), Calculate (Произошел пересчет листа), Change (Содержимое одной из ячеек изменилось), Deactivate (Лист перестал быть активным), SelectionChange (Изменилась выделенная область на листе). Основные свойства и методы «Листа книги» представлены таблицами 10 и 11. Когда Вы будете знакомиться с этими свойствами, Вы заметите, что некоторые свойства одновременно являются и объектами. Речь идет, например о коллекциях Cells, Columns, Names и др.
55
2. «Быстрое» программирование
|
|
Таблица 2.4 |
Основные свойства «Листа книги» |
||
|
|
|
Cells |
Ячейки текущего листа. Возможно обращение к |
|
|
|
конкретным ячейкам |
Columns |
Столбцы текущего листа. |
|
|
|
|
EnableCalculation |
Разрешает или запрещает пересчет |
|
EnableSelection |
Рзрешает или запрещает выделение |
|
Index |
Номер листа в коллекции |
|
|
|
|
Name |
Имя листа |
|
Names |
Коллекция всех имен ячеек и диавпазонов листа |
|
Next |
Возвращает следующий лист книги |
|
|
|
|
PageSetup |
Создает доступ к параметрам страницы |
|
Previous |
Возвращает предыдущий лист книги |
|
|
|
|
ProtectContents |
Определяет, защищено ли содержимое листа |
|
|
|
|
Range |
Диапазон ячеек |
|
Rows |
Колонки текущего листа |
|
|
|
|
UsedRange |
Использованный диапазон ячеек |
|
Visible |
Определяет видимость объекта на рабочем листе |
|
|
|
|
|
|
Таблица 2.5 |
Основные методы для листа книги |
||
|
|
|
Activate |
|
Делает лист активным |
|
|
|
Add |
|
Добавляет листы в рабочую книгу |
Calculate |
|
Выполняет пересчет листа |
|
|
|
Copy |
|
Копирует лист между указанными листами |
Delete |
|
Удаляет лист |
Move |
|
Перемещает лист в указанную позицию |
|
|
|
Protect |
|
Установка защиты на лист |
SaveAs |
|
Запись листа в отдельный файл |
Select |
|
Выделяет лист |
|
|
|
|
|
|
И теперь наступила пора перейти к основному объекту в электронной таблице — объекту доступа к ячейкам и к данным в ячейках Range. Обратите внимание, что имя этого объекта не имеет пе-
56
Основные объекты электронной таблицы Excel
ревода, хотя можно попытаться по смыслу перевести как «Регион» или «Область». Это действительно очень многогранный объект, и одновременно коллекция с очень большим количеством различ- ных свойств методов. Сначала давайте вспомним, что обращение к ячейкам через Range объект реализуется несколькими способами.
Прямая адресация — Range («A1:B3»),
через имя диапазона — Range(«itogi»),
через стандартный выделенный Range объект: ActiveCell èëè
Selection,
через объект Cells(<номер строки>, <номер столбца>).
Последний вариант имеет серьезные отличия от остальных тем, что к нему нельзя применить некоторые методы и невозможно изменить ряд свойств ячейки, но в этом способе есть важное преимущество — номер строки и номер столбца могут быть именами переменных, а это расширяет возможности программирования. Однако в последних версиях VBA появился еще один способ обращения к ячейкам — одновременно через диапазон и ячейку внутри этого диапазона: Range(Cells(i, j), Cells(k,m)). Важность этого способа заключается в том, что здесь одновременно можно применять приемы работы, допустимые и для Range è äëÿ Cells. Отметим, что i è k во внутренних скобках означают соответственно верхнюю и нижнюю строку диапазона, а j è m — номера левого и правого столбцов выбранной области. Основные свойства и методы Range представлены в таблицах 2.6 и 2.7.
|
Таблица 2.6 |
|
Свойства объекта Range |
|
|
Areas |
Возвращает одноименную коллекцию, объекты |
|
которой представляют в форме диапазона все |
|
выделенные области |
|
|
Cells |
Возвращает все ячейки листа, к любой из них |
|
можно обратиться через номер строки или |
|
столбца |
|
|
Characters |
Возвращает массив символов, представляющих |
|
содержащийся в ячейке текст |
|
|
Column |
Возвращает номер первого столбца, |
|
относящегося к заданному диапазону |
|
|
Columns |
Представляет все столбцы диапазона |
|
|
|
|
57
2. «Быстрое» программирование
ColumnWidth |
Ширина столбцов в диапазоне |
Count |
Возвращает число ячеек в диапазоне |
|
|
EntireColumn |
Возвращает Range — объект, представляющий |
|
столбец, которому принадлежит указанная |
|
ячейка или диапазон |
|
|
EntireRow |
Возвращает Range — объект, представляющий |
|
строку, которому принадлежит указанная ячейка |
|
или диапазон |
Font |
Доступ к параметрам шрифта |
|
|
Formula |
Возвращает, содержащуюся в ячейке константу |
|
или формулу в виде строки |
|
|
FormulaHidden |
Если лист защищен, при истинности этого |
|
свойства формула будет скрыта |
|
|
FormulaR1C1 |
Возвращает, содержащуюся в ячейке или |
|
формулу в виде строки формата «R1C1» |
Hidden |
Делает строку или столбец скрытым или |
|
открытым |
|
|
HorizontalAlignment |
Определяет режим горизонтального |
|
выравнивания содержимого ячеек диапазона |
|
|
Interior |
Возвращает объект типа Interior(Интерьер) |
|
|
Locked |
Защищает или снимает защиту ячейки от |
|
изменеий при общей защите листа |
|
|
Offset |
Возвращает Range — объект, полученный |
|
смещением исходного диапазона на заданное |
|
число строк и столбцов |
|
|
Resize |
Возвращает Range — объект, полученный |
|
изменением размеров исходного диапазона до |
|
заданного числа строк и столбцов |
|
|
Row |
Возвращает номер строки для первой строки |
|
диапазона |
|
|
RowHeight |
Высота строк в диапазоне |
|
|
Rows |
Представляет все строки диапазона |
|
|
Value |
Содержимое ячейки |
|
|
VerticalAlignment |
Определяет режим вертикального выравнивания |
|
в ячейках диапазона |
|
|
WrapText |
Разрешает перенос непомещающихся строк |
|
|
|
|
58
|
Использование справочной системы VBA |
|
|
|
Таблица 2.7 |
Основные методы для объекта Range |
|
|
|
Activate |
Делает текущей заданную ячейку |
AutoFill |
Автоматическое заполнение диапазона |
AutoFit |
Выполняет автоподбор ширины столбцов |
Clear |
Удаляет содержимое ячеек полностью |
ClearComments |
Удаляет комментарии к ячекам |
ClearContents |
Удаляет только содержимое ячеек |
ClearFormats |
Удаляет форматирование |
Delete |
Удаляет диапазон с соответствующим сдвигом |
Insert |
Вставляет диапазон с соответствующим сдвигом |
Select |
Выделяет диапазон |
SpecialCells |
Возвращает Range — объект, представляющий все |
|
ячейки листа, удовлетворяющие заданным условиям |
|
|
Отметим, что в таблицах 2.1—2.7 представлены именно основные свойства и методы объектов электронной таблицы. Для того, чтобы получить больше сведений об объектах Excel необходимо воспользоваться справочной системой VBA.
Использование справочной системы VBA
Среда программирования VBA содержит в себе стандартную справочную систему, которой Вы можете воспользоваться — для этого достаточно в меню нажать кнопку Help. Но оказывается, что существуют еще способы получения эффективной справки по свойствам и методам и синтаксису языка. Чтобы воспользоваться этим методом необходимо, находясь в среде программирования, нажать клавишу F2 или воспользоваться меню View/Object Browser. В этом случае откроется окно, содержащее список всех объектов, свойств, методов, констант.
Это окно разбито на несколько частей. В верхней части расположен список библиотек. Используя этот список, Вы можете выбрать обзор сведений для VBA или для всех офисных приложений, или для Excel или даже для Вашего проекта. Вы также можете воспользоваться строкой поиска. Предлагаем Вам перейти в это окно и выполнить следующее упражнение.
59
2. «Быстрое» программирование
Рис. 2.1. Окно просмотра объектов
Упражнение 5
1.Выберите из списка библиотеку для Excel.
2.В левой части окна выберите коллекцию Worksheets. В правой части окна Вы увидите список свойств, объектов и методов для этой коллекции.
3.Используя таблицы 10—11, определите какая из иконок, расположенная слева от слов списка означает метод, свойство или событие.
4.После Вашего выбора в левой части окна Вы увидите пере- чень основных объектов и их коллекций, а также классов констант. При выборе какого нибудь слова из этого перечня в правой части окна Вы получите полный список методов, свойств и событий для выбранного Вами объекта или коллекции.
60
