Зачем изучать язык VBA.
На первый взгляд может показаться, что если вы можете записать макрос средствами программы Excel и потом воспроизвести его, то вам совсем не нужно учить язык VBA. Однако это не так. Записанный макрос не универсален, поскольку он может только повторить однажды выполненную последовательность команд, и только в том же самом порядке, в котором вы ее записали. С помощью VBA можно создать макрос, который будет проверять некоторые заданные вами условия и в зависимости от них менять последовательность или состав выполняемых команд.
Например, вы пытаетесь выполнить в программе Excel макрос, который должен открыть лист с названием Продажи. Если такого листа в текущей книге нет, макрос будет остановлен и Excel выдаст сообщение об ошибке. Но если вы отредактируете свой макрос с помощью VBA, он может сначала проверить наличие нужного листа, а в случае его отсутствия может даже его создать.
Если вам нужно циклически повторить несколько раз некоторую последовательность команд, записанный макрос - плохой помощник. Ведь при выполнении он повторит эту последовательность ровно столько раз, сколько раз вы повторили ее при записи - по крайней мере, до тех пор, пока вы не отредактируете его или не перезапишите.
Другое дело VBA - макрос, который может проверить заданное вами условие или просто перед выполнением запросить информацию о количестве повторений и о том, нужно ли вообще выполнять то или иное действие.
Представьте себе, что вы записали макрос, который меняет ширину столбцов в листе Excel. Если вам требуется, чтобы он менял ширину всех трех столбцов вручную. Записанный макрос всегда будет менять ширину столбцов со второго по четвертый. Отредактировав записанный макрос с помощью VBA, вы добьетесь того, чтобы он спрашивал вас, сколько столбцов нужно обработать и какие именно. Вы даже сможете задать новую ширину.
Это только самый простой пример того, что вы можете делать с макросом с помощью VBA. На самом деле существует очень много обстоятельств, требующих проверки условия для принятия решения или выполнения циклических операций. И единственный способ сделать это - включить в записанный макрос операторы VBA.
Помимо редактирования записанных макросов, вы можете применять VBA для согласованного управления несколькими простыми макросами, каждый из которых выполняет некоторую часть большого задания.
Например, вы можете регулярно импортировать данные из базы данных в лист Excel, формировать, эти данные, строить на их основании диаграмму, а затем посылать и диаграмму, и отформатированный отчет на печать.
Для того чтобы собрать все эти, вполне независимые задания, в одно, и оформить их в виде макроса, вам понадобится записать по макросу для каждого задания - макроса для импорта данных, макрос для форматирования, макрос для построения диаграммы и для вывода на печать. Потом вы сможете запускать эти макросы на выполнение с помощью VBA в нужной последовательности.
Кроме того, с помощью VBA вы можете управлять выполнением других программ, воспользовавшись таким средством, как автоматизация, и сможете организовать обмен данными с помощью OLE.
Использование функций Excel
В дополнение к встроенным функциям Visual Basic for Applications, приложение Excel обладает широким разнообразием функций для выполнения математических, логических, финансовых и статистических операций над данными в рабочих листах. Многие из этих функций доступны для использования в VBA.
Функции, которые Excel позволяет использовать в VBA, не является частью VBA, они входят в состав этого приложения. Функции, которые можно использовать в одном приложении, могут быть недоступными в другом. При написании процедур VBA для работ в любом приложении не следует использовать такие функции, потому что они могут быть недоступными в другом приложении.
Для того чтобы использовать функции, которые принадлежат какому-либо приложению, нужно получить доступ к функции в среде VBA через объект Application. Этот объект представляет приложение и все его ресурсы.
Не всякая функция Excel доступна к применению в среде VBA. Для того чтобы определить, какие из функций Excel доступны, как правильно их использовать и для чего они предназначены, воспользуйтесь справочной системой по ключевому слову function.
Создание настраиваемых диалоговых окон.
VBA позволяет создавать и использовать в программах нестандартные (настраиваемые) диалоговые окна, добавляя объект UserForm в проект. Используя разрабатываемые пользователем формы VBA, можно создавать нестандартные диалоговые окна для отображения данных или получения значений от пользователя программы в том виде, который наиболее соответствует потребностям программы. Например, можно создать тест, отобразить диалоговое окно для отображения вопросов с вариантами ответов и предоставить пользователю возможность выбрать один из вариантов ответа, который он считает верным.
Нестандартные диалоговые окна позволяют программе взаимодействовать с её пользователем самым сложным образом и обеспечивают разнообразную форму ввода и вывода данных.
Нестандартное диалоговое окно создаётся в VBA посредством добавления объекта UserForm в проект. Этот объект представляет собой пустое диалоговое окно; оно имеет строку заголовка и кнопку закрытия, но в нём отсутствуют какие-либо другие элементы управления. Нестандартное диалоговое окно создаётся путем добавления элементов управления в объект UserForm (обычно называемый просто формой). Каждый объект UserForm имеет свойства, методы и события, наследуемые им от класса объектов UserForm.
Каждый объект User Form также содержит модуль класса, в который пользователь добавляет собственные методы и свойства или вписывает процедуры обработки событий для данной формы.
Для того чтобы создать собственный интерфейс, независимый от среды Excel, необходимы экранные формы.
Экранные формы - это окна различного назначения и вида, созданные пользователем для своего приложения. Они содержат элементы управления, позволяющие пользователю обмениваться информацией с приложением.
При создании нового объекта UserForm в проекте создаётся новый подкласс объекта UserForm.
Любые процедуры или функции, записываемые в разделе General модуля класса формы, становятся дополнительными методами подкласса данного конкретного объекта. Новые свойства для формы могут быть также созданы посредством добавления процедур Propery Let в её модуль класса. Процедуры добавляются в наследуемый модуль класса. Новые экземпляры подкласса UserForm создаются с помощью инструкции Dim и ключевого слова New. Однако в большинстве случаев управление формой будет осуществляться посредством использования стандартных методов и свойств класса User Form и создания процедур обработки событий для конкретной формы и её элементов управления.
Кроме методов, свойств и событий, которые объект UserForm представляет изначально, VBA предоставляет две инструкции, которые особенно полезны при работе с объектами форм: Load и Unload. Эти инструкции можно использовать для загрузки формы в память или для удаления её из памяти.
Объект User Form может содержать элементы управления подобные тем, что находятся в других диалоговых окнах, отображаемых Excel и другими Windows-приложениями. Элементы управления - это элементы диалогового окна, которые позволяют пользователю взаимодействовать с программой. К этим элементам относят кнопки переключателей, текстовые поля, линейки прокрутки, командные кнопки и т.п.
Каждый элемент управления - объект со специальными свойствами, методами и событиями. Подобно содержащим их формам, средства элементов управления можно определять программным путём или с помощью окна Properties редактора Visual Basic. Значения свойства элемента управления присваиваются или получаются в VBA- программе, так же, как и для любого другого объекта.
Отображение форм с помощью VBA.
VBA использует созданный графический дизайн формы - с настройками свойств формы и элементов управления - для получения всей информации, необходимой для отображения диалогового окна: размеров диалогового окна, элементов управления в нём и т.п. В результате VBA позволяет отобразить форму диалогового окна с помощью единственной инструкции.
Для отображения нестандартного диалогового окна используется метод Show объекта UserForm.
Если в настоящий момент форма не загружена в память, метод Show загружает форму и отображает её. Если форма уже загружена, метод Show просто отображает её. В любом случае этот метод отображает форму, а затем присваивает ей фокус. Форма остается до тех пор, пока не будет выполнен метод Hide объекта UserForm, либо пока форма не будет выгружена с помощью инструкции Unload.
Форма остаётся загруженной до тех пор, пока экземпляр формы не выйдет за пределы видимости, - т.е. процедура, создавшая этот экземпляр объекта формы, перестанет выполняться - либо пока форма не будет выгружена с помощью инструкции Unload.
Хотя программа в модуле класса формы будет выполняться в результате события в диалоговом окне, общее выполнение программы приостанавливается до тех пор, пока форма диалогового окна не будет закрыта или скрыта.
Использование VBA с элементами управления в форме.
Отображения одного диалогового окна для выполнения задачи обычно недостаточно. Почти всегда требуется определить состояние элементов управления диалогового окна с целью выяснить, какие данные или опции выбрал пользователь. Например, если диалоговое окно используется для получения от пользователя информации о том, по каким столбцам и строкам должно выполняться упорядочение рабочего листа, необходимо иметь возможность выяснить, какие значения пользователь ввел после закрытия диалогового окна и до действительного начала операции упорядочивания.