Для отладки и изменения записанного макроса необходимо знакомство с редактором Visual Basic.
Чтобы получить первые навыки в отладке и редактировании макросов в Microsoft Excel, следует:
· Открыть книгу, которая содержит макрос.
· В меню “Сервис” установить указатель на пункт “Макрос” и выбрать команду “Макросы”.
· В поле “Имя макроса” ввести имя того макроса, который нужно выполнить.
· Нажать кнопку “Изменить”.
В результате этих операций на экране раскроется окно Visual Basic со специальным окном макроса (модуль VB), в котором будет выведен текст макрокоманд (рис. 3.1). Окно макроса – окно на экране, в котором создается и изменяется макрос.
Рис.3.1
В этом окне можно:
а) изменить макрокоманды в соответствии с необходимостью;
б) воспользоваться кнопками на панели инструментов для запуска и проверки результатов редактирования.
Однако если пользователь не обладает хорошими знаниями Visual Basic, то следует протестировать макрокоманды. При тестировании макрокоманды окно документа должно быть активно. Если при тестировании макроса обнаружится ошибка, выполнение макроса остановится, неверный оператор подсветится инверсным цветом, и на экране появится сообщение об ошибке. Характер сообщения зависит от типа ошибки, однако в любом случае большинство из них понятно только программистам. Закончив редактирование, следует закрыть окно макроса и закрыть окно редактора, сохранив введенные изменения.
Готовый макрос можно запустить на выполнение одним из следующих способов:
· Выбрав из меню “Сервис” команду “Макрос”. В поле “Имя” следует указать нужный макрос и выбрать кнопку “Выполнить”. Макрос выполнится.
· Назначив макросу кнопку на панели инструментов и щелкнув эту кнопку. Для присвоения макросу кнопки на панели инструментов или команды меню следует выбрать команду меню “Настройка”, выбрать записываемый макрос в списке “Команды” и перетащить его на панель инструментов или в меню. Затем надо нажать кнопку “Закрыть”.
· Закрепив макрос за комбинацией клавиш и нажав эти клавиши.
Visual Basic (VB)
Visual Basic (VB) для приложений – это среда программирования, основанная на языке программирования Visual Basic для Windows. VBA приходит на смену элементарным языкам макропрограммирования, которые обычно включались в приложения. VBA является высокоэффективным средством для разработки приложений, поскольку он принадлежит к объектно-ориентированным языкам программирования и обладает простотой макроязыков. Пользователи могут записывать свои действия и создавать макросы без изучения сложностей языка. Запись действий, а затем просмотр записанного кода является простейшим способом для самостоятельного изучения VBA.
При создании программы большая часть работы в Visual Basic производится на этапе визуального программирования. Это способствует тому, что при создании программы уже видно, как она будет выглядеть в действии. Привлекательной чертой Visual Basic является способность использования передовых технологий программирования.
Одно из важнейших преимуществ Visual Basic состоит в том, что можно разрабатывать программу небольшими шагами, а после каждого шага запускать ее и наблюдать в действии. Это создает обратную связь и позволяет оценивать и корректировать программу на всех этапах ее разработки. Однако надо помнить, что необходимо сохранить созданную часть программы перед запуском, так как возможная ошибка в коде может привести к зависанию и потере информации.
Объекты
В Visual Basic для приложений применяется модель объектно-ориентированного программирования. Объектами могут быть диаграммы, рисунки, фигурный текст, таблицы и т.п., вставляемые в документ. Объектам известно, как им “манипулировать самими собой и воспроизводить себя”, если они внедрены в документ другого приложения. В Visual Basic для приложений используются преимущества, предоставляемые этой возможностью для управления указанными объектами.
Объекты VBA представляют собой удобный способ для хранения и скрытия данных и кода в программе. Вместо того чтобы написать программу для манипулирования некоторыми данными, можно объединить данные и код, который манипулирует этими данными, в один объект. С этого момента доступ к данным и их обработка осуществляются только средствами объекта.
Это используется при внедрении объектов одного приложения в объекты другого. Внедренный объект сам заботится о себе, от объекта-контейнера требуется только предоставить внедренному объекту соответствующие ресурсы. Например, при подключении кнопки Visual Basic к рабочему листу рабочий лист не знает, какое действие необходимо выполнить при щелчке мышью по ней, – эта информация содержится в вызываемой объектом процедуре.
К объектам VBA в Microsoft Excel относятся кнопки, пункты меню, диапазоны ячеек рабочего листа и рабочие листы целиком. Почти все, что можно увидеть на экране в процессе выполнения приложения, является объектом. Объекты в Visual Basic для приложений можно представить в виде нескольких контейнеров. Самый большой контейнер – это объект-приложение, представляющий собой текущую программу в процессе выполнения, например, Excel. Объект Application в Excel содержит объекты меню (Menu), объекты – элементы управления (Control), объекты – рабочие книги (Workbook) и т.д. Внутри объекта Рабочая книга находятся объекты-листы (рабочие листы, листы макросов, листы модулей, листы диалога и т.д.), внутри объектов-листов расположены объекты диапазона (Range). Для других приложений предусмотрены подобные объекты для выполнения их специфических задач. Перечень объектов приводится в каждом приложении в документации и в справочной системе для различных приложений Microsoft Office.
Для доступа к определенному объекту в Visual Basic для приложений нужно указать имя внешнего объекта контейнера, затем имя вложенного в него объекта контейнера и т.д., до тех пор пока не будет достигнут требуемый объект. Например, в Excel для доступа к ячейке В5 на рабочем листе 3 в рабочей книге “Книга 1” используется следующая ссылка (имена объектов контейнеров разделяются точкой):
Application. Workbooks (“Книга 1”).Worksheet (“Лист3”). Range (“В5”)
Класс объектов – это ссылка на общий тип или классификацию объектов. Например, в Visual Basic для приложений каждая ячейка или диапазон ячеек на рабочем листе Excel являются объектом Range, который представляет собой реализацию класса Range. Объединение всех объектов определенного класса в группу создает семейство. Так, все рабочие листы в рабочей книге Excel находятся в семействе Worksheet. Кроме того, рабочие листы принадлежат также и семейству Sheets, которое включает все типы листов (рабочий лист, диаграмма, модуль, диалог) в рабочей книге.
Данные объекта называются свойством объекта. Свойство объекта определяет, как объект выглядит или как он себя ведет. Значениями свойств могут быть текстовые строки, числа, логические значения или нумерованные списки. Нумерованный список – это пронумерованный перечень значений, в котором номер используется для выбора определенного значения. Например, свойство Color большинства объектов – это нумерованный список, в котором значению 0 соответствует отсутствие цвета, значению 1 – черный цвет, 2 – белый, 3 – красный, 4 – зеленый, 5 – синий и т.д. VBA и другие совместимые приложения в Microsoft Office содержат перечни предопределенных констант для нумерованных списков, перечисленных в описании свойства в справочной системе; эти константы можно использовать вместо чисел.
Простейший способ для написания программы, изменяющей свойства объектов, состоит в том, чтобы создать макрос с необходимыми установками и затем скопировать процедуру изменения свойства в программу. Для доступа к свойствам объектов используется следующий синтаксис:
object.property
где: object – объект, свойства которого нужно изменить или просмотреть;
property – имя свойства.
Например, чтобы установить в Excel значение свойства Formula (содержимое ячейки) для ячейки В5 равным ABS(B4), если ячейка находится на листе “Лист1” в рабочей книге “Книга2”, можно использовать следующий оператор:
Workbook(“Книга2”).Worksheet(“Лист1”).Range(“В5”).Formula = “ABS(B4)”
Для получения значения этого свойства из этой же ячейки и для сохранения его в переменной Мy Formula можно использовать следующий оператор:
My Formula =
Workbook(“Книга2”).Worksheet(“Лист1”).Range(“В5”).Formula
При создании операторов применяются рассмотренные выше правила, относящиеся к пропуску объектов контейнера.
Методы
Методы в Visual Basic для приложений – это блоки кода, хранящиеся в объекте, которые позволяют манипулировать данными объекта. Например, для объекта Range метод Calculate вычисляет заново значения формул в выделенных ячейках, а метод Clear – удаляет содержимое ячеек. Методы совершают действия с объектами и содержащимися в них данными, в отличие от свойств, которые только устанавливают значения. Справочная система поможет определить, какие методы следует использовать для того или иного объекта и узнать дополнительную информацию об особенностях отдельных методов.
Доступ к методам объекта и их выполнение осуществляется почти так же, как доступ к свойствам объекта. Основное различие заключается в том, что, например, доступ к свойству всегда является частью формулы, а метод должен быть частью формулы только тогда, когда он возвращает значение.
Например, в Excel метод Rows возвращает семейство, содержащее все строки в диапазоне. Чтобы установить с помощью этого метода значение свойства RowHeight всех строк текущего выбранного диапазона равным 20, используется формула:
Selection.Rows.RowHeight = 20
Для получения числа строк в текущем выделении можно использовать метод Rows для возвращения семейства и свойство Count для возвращения числа элементов в семействе:
NumRows = Selection.Rows.Count
Некоторые методы имеют аргументы, например, для метода Rows требуется индекс строки для выбора отдельной строки из семейства Rows. Если метод является частью формулы, то аргументы должны находиться в круглых скобках. Для того чтобы получить значение свойства RowHeight второй строки в семействе Rows, используется следующий оператор:
TheHeight = Selection.Rows(2).RowHeight
Если производится только выполнение метода, и он не является частью формулы, то аргументы размещаются справа от ссылки на этот метод. Например, метод Insert при использовании для объекта Range требует сведений о том, как перемещать выделенные ячейки. При использовании метода Insert для вставки пустых ячеек на место текущего выделения и перемещения его вниз для получения свободного пространства можно использовать следующий оператор:
Selection.Insert xlDown
Аргумент в действительности представляет собой целое число, но здесь использована встроенная константа для того, чтобы сделать код более наглядным. Описание встроенных констант метода приводится в справочной системе.
Создание приложений
Создание приложений в Visual Basic включает два базовых шага:
1. Построение пользовательского интерфейса приложения, позволяющего вводить и выводить информацию.
2. Написание программного кода, обеспечивающего обработку информации.
В Visual Basic пользовательский интерфейс и часть кода представлены в виде экранной формы. Пользовательский интерфейс программ для Windows обычно состоит из меню, одной или нескольких панелей инструментов для ускорения действий и рабочей области, представленной в виде документа или развернутого листа. Экранная форма – это то, что образует окно (или окна), которое пользователь программы видит на экране.
Несмотря на то, что разрабатываемый пользовательский интерфейс может отличаться от интерфейса других программ для Windows, есть некоторые элементы, которые должны быть выполнены так же, как и у других программ. Это нижеперечисленные элементы:
· Меню “File”, позволяющее открывать, сохранять и закрывать файлы.
· Меню “Edit”, где содержатся операции удаления, копирования, вставки и очистки.
· Меню “Help”, куда пользователь обращается за помощью.
· Инструментальная линейка, на которой расположены кнопки, используемые для ускоренного запуска выполняемых операций.
Остальные элементы интерфейса следует подобрать, используя различные объекты управления. Объекты управления представляют собой основу для построения всех программ на Visual Basic. Объекты управления позволяют создавать программу, не требуя от разработчика всех деталей, отвечающих за работу этих объектов.
Некоторые объекты управления (такие как текстовые окна, полосы прокрутки, окна списков, кнопки-переключатели) используются для обеспечения пользовательского ввода. Другие элементы управления, такие как командные кнопки, позволяют пользователю выполнить предусмотренные в программе действия.
Несмотря на важность, пользовательский интерфейс при разработке программы сам по себе не обеспечивает решения всех задач. Только программный код реально делает разрабатываемую программу рабочим инструментом. Кодом называется язык, который используется для общения с компьютером.
Visual Basic - язык программирования, поддерживающий программные конструкции, присущие большинству других языков программирования.
Правильно написанная программа создается по модульному принципу. Большинство программ создается из блоков, известных как процедуры и функции. В языке Visual Basic модуль - набор объявлений и процедур на языке VB для приложений, собранных в одну программную единицу.
В Visual Basic имеется два типа процедур:
1. Процедуры обработки событий.
2. Общие процедуры.
Visual Basic автоматически вызывает процедуры обработки событий в ответ на действия клавиатуры, мышью или системные действия. Например, командные кнопки имеют процедуру обработки события Click (щелчок мыши). Код, который помещается в процедуру обработки события Click, будет выполнен, когда пользователь щелкнет кнопку.
Каждый элемент управления имеет фиксированный набор процедур обработки событий (для каждого поддерживаемого объектом события). Эти процедуры для каждого элемента управления перечислены в раскрывающемся списке Procedure в окне кода Visual Basic.
Например, следующий фрагмент кода – процедура обработки событий Click для командной кнопки cmdOK:
Private Sub cmdOK_Cliсk()
MsgBox “Visual Basic” ‘Открыть окно сообщения
End Sub
После того, как к приложению добавлен некоторый программный код, в окне “Object Browser” можно увидеть все созданные процедуры, быстро перейти к определенной процедуре или вставить вызов процедуры в текст программы в окне кода.
В окне “Object Browser” показаны классы, доступные из всех объектных библиотек, подключенных к проекту.
Модули классов в VВ – модули, связанные с определенной формой или отчетом, которые содержат процедуры обработки событий, запускаемые в ответ на событие в форме или отчете.
Общие процедуры – это процедуры, создаваемые для выполнения определенных задач. В отличие от процедур обработки событий, чтобы выполнить общую процедуру, ее надо явно вызвать. Вызвать процедуру можно, специфицируя только имя процедуры или используя оператор Call с именем процедуры и параметрами. Например,
Call sortList (“name1”)
Создать общую процедуру можно с помощью оператора Sub или с помощью диалогового окна “Insert Procedure” или “Add Procedure” в зависимости от версии Visual Basic. Процедура Sub не возвращает значений, она только выполняет некоторую обработку или действие. Ход выполнения программы с процедурой Sub показан на рис. 3.2.
Рис. 3.2.
Процедура Function выполняет действие и возвращает значение. Например, в следующем примере функция получает число и возвращает квадрат этого числа:
Function Square (I As Integer) As Integer
Square = I * I
End Function
Если требуется сохранить возвращаемое значение, при вызове функции необходимо использовать круглые скобки, как в следующем операторе:
J = Square (5)
Если круглые скобки опущены, возвращаемое значение можно игнорировать или не сохранять его в переменой. Это может быть полезно, если требуется лишь выполнить обработку, связанную с функцией. Например:
Square 5
Кроме добавления кода к модулю, ассоциированному с формой, можно также объявлять процедуры в стандартных модулях. Стандартные модули содержат только код Visual Basic. Они предназначены для хранения кода, который не привязывается к определенной форме. Стандартные модули в VB – модули, в которых содержатся общие процедуры, не связанные ни с каким объектом.
Процедуры могут быть объявлены как Private или Public. К классу Private относятся переменные, используемые только внутри процедуры или функции, в которой они определены. К классу Public относятся общие переменные, которые доступны во всех процедурах или функциях программы. Их можно использовать для хранения информации, необходимой в нескольких процедурах.
Следовательно, процедуры, объявленные как Private, могут вызываться только другими процедурами, размещенными в данной форме, модуле или классе.
Процедуры Public в модуле-форме становятся методами формы. Такие процедуры можно вызвать отовсюду в приложении, специфицируя имена процедуры и формы.
Процедуры Publiс, описанные в стандартном модуле, доступны из любого места в приложении и могут вызываться специфицированием только имени процедуры.
Например ниже представлена процедура Publiс:
Public Sub Proc1 ()
.
.
.
End Sub
Если эта процедура объявлена в модуле формы, вызывается она следующим образом:
Form1.Proc1
Если процедура объявлена в стандартном модуле, вызывается она так:
Proc1
Функцию, как и процедуру, можно создать с помощью диалогового окна либо с помощью оператора Function. Как и процедура, функция может быть объявлена как Public или Private и может быть помещена на экранную форму или в отдельный модуль. Синтаксис обращения к функции практически идентичен синтаксису вызова процедуры.
Разработка программ в виде набора небольших фрагментов (модулей) упрощает их написание и отладку.