Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Orlov_VBA

.pdf
Скачиваний:
23
Добавлен:
13.03.2016
Размер:
7.79 Mб
Скачать

VBA: для тех, кто любит думать

Введение

** *

Вашему вниманию предлагается книга, посвященная весьма интересной теме - возможностям и способам создания программ, работающих в среде пакета программ Microsoft Office. Нет нужды говорить о популярности этого пакета в нашей стране, однако, к сожалению, немногие пользователи знают и применяют в своей деятельности возможности его компонентов в области автоматизации своей работы с помощью макросов. И уж совсем единицы используют Microsoft Office как среду разработки программных продуктов. Отчасти такая ситуация вызвана несколько пренебрежительным отношением многих профессиональных разработчиков программ к Visual Basic for Applications - языку программирования, "встроенному" во все компоненты пакета программ Microsoft Office (начиная с версии 95). Однако Visual Basic for Applications (сокращенно - VBA) - вполне полнофункциональный язык программирования, с помощью которого можно создавать вполне законченные и работоспособные программы, как просто облегчающие работу с Microsoft Office, так и предназначенные для проведения расчетов, обработки данных.

Но самое главное - на VBA могут создавать программы даже те, кто ранее никогда не занимался программированием, причем для этого не потребуются ни толстые книги, ни дорогие курсы обучения. Необходимо лишь уметь думать: наблюдать, исследовать, ставить эксперименты, делать выводы, - проявлять способности к научному подходу.

Для написания программ на VBA вам не потребуются многостраничные руководства. Лучше всего даже, чтобы они появились у Вас тогда, когда Вы освоите по меньшей мере треть или даже половину возможностей этого языка, и тогда они будут прочитаны Вами как захватывающий детектив, а не как занудные учебники. Более того, тогда оставшиеся две трети информации о возможностях VBA будут усвоены вами гораздо быстрее и легче. Кроме того, создавая программы на этом языке, Вы получите прекрасную возможность смоделировать в данном процесе способы подхода к этому миру со стороны исследователя, экспериментатора, ученого, научиться принципам научного подхода к исследованию различных явлений или вспомнить их. И необьятный простор открывает такая, казалось бы, обыкновенная вещь, как Microsoft Office и его средства разработки программ для обучения и воспитания подрастающего поколения, - программирование в среде этого пакета программ является превосходным средством для выработки у учеников самостоятельности в исследованиях, способности сопоставлять различные факты и анализировать информацию, - всего того, что нужно разумному человеку или даже будущему ученому.

Эта книга, посвященная программированию в среде Office, естественно, не может охватить всех тонкостей искусства создания программ на VBA, да такая задача перед ней и не стоит. Она является, скорее, введением в этот язык, и предназначена для того, чтобы познакомить вас с ним, описать основные его возможности, помочь в начале работы, предостеречь от некоторых затруднений и ошибок.

Программы на VBA - макросы - можно создавать для любой программы пакета Microsoft Office: для Word, Excel, Access, PowerPoint и даже Outlook. В этой книге будет преимущественно рассмотрен процесс создания макросов для Microsoft Word. Среда Microsoft Word выбрана для начального изучения работы с Редактором VBA и принципов программирования на Visual Basic for Applications из-за того, что, во-первых, именно Word является наиболее популярной программой из всего пакета Microsoft Office (по подсчетам исследователей из Microsoft, из каждой сотни запусков программ из комплекта Microsoft Office в 60% случаев запускаемой программой будет именно Word), а, во-вторых, писать программы, работающие в среде данного текстового редактора, несколько проще, чем дополнения для других компонентов Office. Научившись работать с VBA в Word, вам будет довольно просто перейти к программированию для остальных компонентов Office.

Не обязательно читать все главы книги подряд. После небольшого экскурса в историю программирования второй главы в третьей и четвертой главах будут описаны основные компоненты Microsoft Office, предназначенные для написания программ, рассказано о работе с ними, а также описан сам язык VBA, его синтаксис. Они скорее представляют собой небольшой справочник, полезный на первых порах, к которому иногда стоит возвращаться. Следующие три главы посвящены написанию программ на VBA, в них подробно описаны все шаги такой работы. Еще одна глава расскажет вам о полезных и интересных приемах программирования. В последней главе вы найдете краткий обзор

некоторых интересных программ на VBA, которые можно использовать для обучения в качестве примеров. А в Приложении вы узнаете о том, какие игры есть в Microsoft Office (да-да, именно игры - посмотрите первую главу Приложения!) и о новых возможностях новой версии Microsoft Office - Microsoft Office XP.

Книга богато иллюстрирована, что в какой-то мере избавляет читателя от необходимости иметь рядом компьютер, - на каждый пример приводится соответствующий снимок экрана, который позволит хотя бы внешне ознакомиться с описываемыми средствами.

Предполагается, что читатели знакомы с программой Microsoft Word и знают основные приемы работы в этом текстовом процессоре.

* * *

На настоящее время выпущено три версии Microsoft Office, содержащие в себе возможности работы с VBA - 97, 2000 и 2002, иначе именуемая XP. За некоторыми исключениями все они между собой совместимы "сверху вниз", то есть программа, написанная для Word97 и в среде этого редактора, будет работать и в Word2000, и в WordXP. Обратное же верно не всегда: в Word2000 и особенно в WordXP добавлены новые команды VBA, и программа, их использующая, в Word97 уже не заработает.

В предстоящих главах в качестве основной среды программирования рассматривается Microsoft Office 97, так как вследствие вышесказанного наиболее разумным будет использовать в качестве среды разработки именно 97-ю версию Microsoft Office, в частности, для того, чтобы создаваемую программу могли применять пользователи всех версий Office. Кроме того, только в Microsoft Office 97 часть Справочной системы по VBA, входящей в состав Microsoft Office, русифицирована. Об особенностях же программирования для Office 2000 и Office XP сообщается отдельно там, где эти особенности имеют какое-либо значение.

* * *

О ценности информации

Немного философии...

С появлением информационных технологий человеческое общество фактически перешло в новую фазу развития. И связано это с тем, что достижения компьютерной техники позволяют неограниченно и крайне дешево размножать такую вещь, как информацию. Ранее, например, лет пятьсот назад, для получения новой копии информации приходилось прилагать немало усилий: переписать книгу (а перед этим еще подготовить листы для книги из пергамента), прочитать и выучить текст, нарисовать копию картины, перед этим подготовив холст и краски. Зачастую усилия на создание новой копии источника информации были сравнимы с усилиями на создание самого этого источника, - например, переписывание книг занимало года. И создавать новые копии могли лишь специально подготовленные люди: ученые монахи-переписчики, художники, поэты. С появлением книгопечатания процесс облегчился: теперь книгу, ставшую основным носителем информации, можно было распечатать в большом количестве, и для этого не требовалось квалифицированного творческого труда. Но все равно затраты на размножение информации оставались немалыми: книгу надо сверстать, напечатать, сшить, распространить...

Но с появлением компьютерных технологий и, в особенности, сети Интернет затраты сил и средств на получение новой копии какой-либо информации стали ничтожными.

Ценность любой информации определяется суммой тех материальных и духовных благ, которые может дать конкретному человеку ее использование. Поэтому каждое копирование информации

увеличивает количество благ, привносимых ею в мир, фактически на столько же, на сколько оно было увеличено при ее создании, - естественно, при условии попадания ее в нужные руки. При каждом копировании информации с помощью современных компьютерных технологий происходит умножение совокупного богатства человечества с крайне малыми затратами. Это уникальная ситуация - представьте себе, что один человек испек пирог и накормил им множество человек, причем пирог, который сьел каждый, был точно такой же по размерам, что и первоначальный.

Из этого следует закономерный вывод - надо всячески стремиться к размножению и копированию информации. Для того, чтобы максимально увеличить количество благ, которыми располагает человечество.

Но, к сожалению, в последнее время возобладала прямо противоположная тенденция - запрещать копирование информации, "охранять" ее. Да, разумеется, создатели информации должны получать вознаграждение за свой труд, и немалое - работа тяжелая, даже очень. Но почему это должно достигаться путем запретов на копирование? Ведь есть и другие пути - скажем, можно централизованно

собирать со всех, использующих информационные ресурсы, небольшой налог и из этих средств выплачивать авторам вознаграждения, сообразуюсь с мнением пользователей о качестве той или иной информации? Поскольку авторов информации гораздо меньше, чем ее потребителей, то налог может быть очень небольшим. К тому же подобная ситуация приведет к стремлению всех, и авторов, и потребителей, максимально увеличить количество пользователей информационных сетей, как можно больше делать копий, - ведь тогда средств будет собираться больше! В выигрыше будут все. Единственно, что надо для этого - изменить существующий взгляд на информацию как на продаваемый товар: "заплатил - пользуйся, не заплатил - не пользуйся", и считать деньги, выплачиваемые автору информации, вознаграждением ему за труд, а не платой за получение этой информации. Изменить сформировавшееся в последние годы мировоззрение "собственника".

Тем более что обьективных предпосылок для такого мировоззрения нет. Стоит помнить, что те, кто сейчас создает информационные ресурсы и получает огромные прибыли за счет их продажи из-за разницы в себестоимости и доходе, фактически стоят "на плечах предков". Миллионы людей работали долгие годы для того, чтобы сейчас у человечества появилась возможность копировать информацию почти без затрат сил и ресурсов, зачастую не получая достаточного вознаграждения своего труда. И они тоже могут рассчитывать на прибыль от распространения информации в настоящее время. Ну, уже, увы, не они - так их потомки, дети и внуки. А в то время, когда ученые разрабатывали первые компьютеры, без которых было бы невозможно создание современных компьютерных систем, этих ученых кто-то должен был кормить, одевать, кто-то строил им дома. Значит, и эти люди имеют право на долю прибыли от продажи информации, созданной и распространяемой с помощью компьютеров! Так что все здесь взаимосвязано, и выяснить, кто конкретно имеет право на доходы от продажи той или иной информации, нельзя.

Поэтому развитие технологии, появление компьютерных систем и глобальных информационных сетей требует создания новой системы межчеловеческих взаимоотношений. Только отказ от принципа "продажи" информации, только связанное с этим изменение мировоззрения людей позволят максимально использовать открывшиеся новые возможности. Только восприятие денег, выплачиваемых за информацию, как вознаграждение ее автору за его тяжелый труд, а не как стоимость этой информации, только отказ от принципов "охраны интеллектуальной собственности" (но не авторского права!)1 даст возможность человечеству приумножить свое совокупное богатство во много раз практически без затрат труда и ресурсов.

Некоторые попытки создания новой мировоззренческой системы были предприняты в Советском Союзе до его уничтожения. Низкие цены на книги, бесплатная система образования, авторские свидетельства вместо патентов, - все это вызвано именно мировоззрением, отличным от распространяемого сейчас. Проблемы, существовавшие тогда - иной раз не очень высокие вознаграждения авторам, проблемы с бюрократией и внедрением изобретений были вызваны отдельными недоработками в общей системе управления и являлись вполне решаемыми. И последствия такого взгляда на жизнь были налицо - страна, перенесшая разрушительнейшую войну, находящаяся в крайне неблагоприятных климатических условиях, стала одной из самых развитых стран мира и интеллектуальным и научным центром планеты, а ее народ - едва ли не наиболее образованным среди всех... До сих пор многие западные страны охотятся за советскими разработками, зачастую опережающими их собственные на несколько десятилетий.

Однако ясно, что односторонний отказ от сложившейся системы "торговли" информацией ни к чему хорошему не приведет, - ведь другие держатели информации отнюдь не обязательно добровольно последуют благому примеру. Создание глобальной централизованной системы распространения информационных ресурсов можно осуществить лишь на государственном уровне. Одним из наиболее прискорбных моментов истории развития компьютерных технологий была ориентация производителей программного обеспечения на продажи своих продуктов на рынке, вместо воздействия на государственные структуры с целью обьединения всех производителей программ в централизованную систему распространения информации. Последствием этого неправильного решения станет серьезное замедление развития нашей цивилизации.

1 Это означает, что пользователи должны платить за информацию столько, сколько они могут заплатить, а не столько, сколько назначает производитель, - при условии, что информация не предназначена исключительно для этих пользователей.

VBA: история

** *

Язык программирования Visual Basic for Applications, о котором пойдет речь в этой книге, является результатом пересечения двух ветвей развития информационных технологий, - языка программирования Basic и макроязыков текстовых редакторов, программ работы с электронными таблицами и других приложений.

Basic

Basic, язык, чье название является аббревиатурой от английского "Beginner's All-purpose Symbolic Instruction Code" (в переводе - "язык из символьных команд для широкого применения начинающими"), был разработан профессорами американского Дартмутского колледжа Кемени и Курцом в далеком 1965 году. Целью языка было облегчение освоения учениками колледжа, да и вообще начинающими программистами основ создания алгоритмического кода, поэтому его возможности были довольно серьезно ограничены по сравнению с другими языками ради того, чтобы иметь возможность добавить в него обучающие функции. Так, в Basic'е программы могли выполняться построчно, поскольку сам язык был интерпретируемым, - программы хранились не в машинных кодах, а в исходном тексте, и переводились в машинный код при своем запуске. Первые версии Basic'а были довольно примитивными, однако с течением времени язык получил свое развитие. Многие читатели этой книги наверняка еще застали то время, когда "классический" Basic изучали на уроках информатики в школах, помнят пронумерованные строки, односложные команды, элементарный синтаксис.

Для фирмы Microsoft язык Basic имеет особое значение, - в свое время разработка варианта Basic для компьютера Altair 8800 положила начало трудовому программистскому пути ее основателей, Билла Гейтса и Пола Аллена. Поэтому в свое время - в 1989 году, когда пришла пора распределить основные направления создания сред разработки на различных языках программирования между различными фирмами, Microsoft оставила за собой QuickBasic - среду разработки программ на Basic'е, отказавшись, к примеру, от дальнейшей работы над языком программирования Pascal, оставив его фирме Borland, которая, в свою очередь, остановила работы над своей версией Basic'а (впоследствии Pascal стал языком Delphi). QuickBasic даже включался в состав некоторых версий MS-DOS в виде усеченной версии - QBasic (рис. 2.1). В итоге Basic стал тесно связан с операционными системами от Microsoft и на иных платформах практически неизвестен.

Рис. 2.1. QBasic - предшественник нынешних Basic'ов.

С созданием первых версий операционной системы Windows фирма Microsoft стала выпускать и средства разработки программ на Basic'е, предназначенные для этой операционной системы. Однако концепция программирования в новых версиях Basic'а изменилась. Так, среда разработки получила визуальный графический интерфейс - такой же, как и у других приложений Windows (что и послужило поводом для перемены названия языка - теперь он стал именоваться Visual Basic). За счет нового

интерфейса процесс создания программ стал значительно легче и удобнее, хоть и потребовал определенных усилий по освоению от программистов "старой закалки", привыкших к прежним "орудиям труда".

Помимо нового интерфейса, в Visual Basic стали использоваться и иные принципы программирования, - обьектно-ориентированная модель, ориентированность программы на реакции на события, а не на последовательную работу без вмешательства извне, "дружественность" легкого в разработке графического интерфейса программ. Все это, вместе взятое, привело к широкому распространению Visual Basic'а в среде пользователей Windows, так как теперь появилась возможность создавать удобные в применении программы без утомительного и долгого обучения программированию. По общему мнению компьютерного сообщества, именно Visual Basic стал родоначальником систем визуальной разработки программ, на настоящее время созданных уже практически для всех существующих языков программирования.

Первая версия Visual Basic была еще очень несовершенной. Но с 1991 года Visual Basic прошел немало этапов развития, и в настоящее время достиг уже своей 6-й версии, позволяющей даже начинающим программистам быстро создавать мощные и удобные приложения.

Макросы

Еще в старом добром русском Lexicon'е, царствовавшем в эпоху 286-х компьютеров и операционной системы MS-DOS первых версий, был встроенный язык программирования. С его помощью можно было несколько автоматизировать работу с текстом. Несмотря на ограниченность набора команд, присутствующих этом языке, некоторые пользователи Lexicon'а умудрялись писать на нем длинные программы...

Да, действительно, - макрокоманды, то есть программы, работающие в среде другой программы, не являющейся операционной системой, широко использовались и используются в различных приложениях2. Например, такие крупные программные комплексы, как CorelDraw, AutoCad обзавелись возможностью создания макрокоманд довольно давно.

Первое время макрокоманды представляли собой простое перечисление в нужном порядке применяемых к данным пользователя встроенных функций программы (например, набор команд работы над текстом в Lexicon'е) и служили простым автоматически выполняемым заменителем действий пользователя. Впоследствии в макроязыках стали предусматриваться и операторы условного перехода (т.е. If…Then) или цикла, что стало приводить к все большей их схожести с реальными языками программирования.

VBA

Впрограммах Microsoft при разработке средств создания макросов за основу был взят, что естественно было ожидать, Visual Basic. В 1993 году этой фирмой было официально заявлено, что ее сотрудники приступают к разработке универсальной системы программирования для Microsoft'овских офисных программ - Visual Basic for Applications. В скором времени все новые версии компонентов Microsoft Office стали снабжаться специальными средствами, позволяющими создавать достаточно мощные макрокоманды.

ВMicrosoft Office 4.0, включающем в себя Word 6.0, Access 2.0, Excel 4.0, Project 6.0, только два последних компонента включали в себя относительно полноценные версии обьектно-ориентированного языка Visual Basic for Applications (тогда еще самой первой версии - 1.0). В Word 6.0 для создания макрокоманд использовался WordBasic (рис.2.2), состоящий из набора команд работы с текстом документа и нескольких функций работы с файловой системой, примерно такой же язык присутствовал

ив Access 2.0. В улучшенной и приспособленной для работы в Windows 95 версии Office - Microsofi Office 95 - положение не изменилось, и в каждом из приложений Office так и осталась собственная среда программирования.

2 Строго говоря, название "макросы" для них не является точным: в классическом программировании под макросом понимают имеющую имя группу команд, которая подставляется на место этого имени в текст программы перед ее переработкой в машинные коды и служит для облегчения труда программиста.

Рис. 2.2. WordBasiс - предшественник VBA в Microsoft Word.

При разработке Microsoft Office 97 в его состав была включена переработанная среда разработки Microsoft Visual Basic 5.0, которая с учетом особенностей программирования в среде офисного пакета получила название Visual Basic for Applications 5.0 - по номеру исходной среды. Ее основой стал Редактор VBA - "Visual Basic Editor", в котором, собственно, и создавался программный код.

Полностью Visual Basic for Applications применялся в трех приложениях Microsoft Office 97 - Word, Excel и PowerPoint. В Microsoft Access по-прежнему использовалась оригинальная среда программирования, а в Microsoft Outlook применялась серьезно урезанная версия Visual Basic for Applications - VBScript, не включавшая в себя и половины возможностей исходного языка.

Новое развитие Visual Basic for Applications получил в юбилейной, 2000-й версии офисного пакета. На этот раз все компоненты Office получили в свое распоряжение полноценную среду разработки программ: Visual Basic Editor стало можно использовать и в Access, и в Outlook, и даже в Frontpage,

вошедшую в состав нового Офиса. В Visual Basic for Applications 6.0, версию, используемую в Microsoft Office 2000, были добавлены многие новые команды, в частности, уже имеющиеся в Visual Basic for Windows версии 6.0. В следующей версии Microsoft Office, Office XP, развитие Visual Basic for Applications было продолжено, хотя нововведения коснулись уже лишь набора команд, который был несколько расширен. В Microsoft Office XP также появилась возможность создания так называемых "смарт-тэгов", компонентов Office, отслеживающих определенные, задаваемые разработчиком смарттэга действия пользователя и выполняющих определенную функцию при таких действиях (в случае согласия пользователя). Однако смарт-тэги создаются с помощью специальной среды разработки и с

Visual Basic for Applications напрямую не связаны.

Visual Basic for Applications - это не просто язык программирования, а целая технология, которую вполне можно распространить и на другие приложения сторонних производителей, подарив их пользователям возможность создавать программы, работающие в их среде. В настоящее время фирма Microsoft активно распространяет лицензии на право использования Visual Basic for Applications в продуктах, создаваемых их покупателями, так что, возможно, в скором времени средства VBA можно будет применять едва ли не в каждой более-менее крупной программе.

Средства программирования на VBA

** *

Вотличие от других средств разработки программного обеспечения, где единственным способом создания новой программы является написание ее кода и создание в визуальных редакторах диалоговых окон или использование уже готовых фрагментов кода других программ, в Visual Basic for Applications есть уникальное средство разработки, не присутствующее более нигде и позволяющее быстро научиться создавать простые макросы для Word, Excel и PowerPoint даже без использования учебников, описаний языка и даже чтения Справочной системы. Это средство - так называемая "запись макросов". При работе в любом из вышеперечисленных компонентов Microsoft Office можно включить специальный режим записи макросов, и тогда все действия пользователя в редакторе будут автоматически "переводиться" на язык Visual Basic for Applications и записываться в виде текста программы. Этот текст можно потом изучить для выяснения синтаксиса и устройства языка, а также необходимым образом его модифицировать. Разумеется, отнюдь не все возможности Visual Basic for Applications реализуются простой записью действий пользователя, однако для простых макрокоманд и для обучающих целей этого средства хватит.

ВMicrosoft Word для записи макроса надо выбрать из меню "Сервис" пункт "Макросы", а затем из выпадающего подменю - пункт "Начать запись" (рис. 3.1).

Рис. 3.1. Запись макроса

Документы Microsoft Word - собственно документы с расширением ".doc" и шаблоны документов с расширением ".dot" - устроены так, что могут хранить в себе программы на Visual Basic for Applications. Каждую программу, хранящуюся в документе Word, может вызывать на исполнение либо кнопка на панели инструментов, либо сочетание клавиш, либо пункт меню, либо другая программа (ну и, естественно, выбор этой программы из списка макрокоманд в диалоговом окне "Сервис-Макрос- Макросы". Возможно любое сочетание способов вызовов. Поэтому перед началом записи макроса пользователю предлагается сразу назначить записываемому макросу способ его вызова (рис. 3.2).

Рис. 3.2. Назначение макросу способа вызова.

Если на данном этапе для вызова макроса не будет назначена кнопка или сочетание клавиш, то это всегда можно будет сделать впоследствии с помощью диалогового окна "Настройка" (рис. 3.3) так же, как и для любой другой команды Word. Названия макросов, которые могут быть запущены пользователем, перечисляются в разделе "Макросы" этого окна и состоят из названия проекта (обычно совпадает с названием шаблона или документа, в котором макрос содержится), имени модуля и имени макроса в модуле (что это такое - смотрите ниже).

Рис. 3.3. Диалоговое окно "Настройка".

После нажатия кнопки "Ок" в окне Word появится панель "Запись макроса" (рис. 3.4).

Рис. 3.4. Панель "Запись макроса".

С этого момента все действия пользователя тщательно протоколируются, хотя и с определенными ограничениями - так, в таком режиме невозможно проводить выделение текста мышью (перемещением курсора с нажатой клавишей Shift можно), не работает контекстное меню правой кнопки мыши. Но этих ограничений немного.

После окончания выполнения необходимых действий необходимо нажать левую кнопку на панели - "Остановка записи". Если необходимо прерваться и все же выделить какой-нибудь обьект мышью, то необходимо нажать правую кнопку на этой панели - "Пауза". При повторном ее нажатии процесс записи продолжится.

Пример подробного анализа результатов подобной записи будет показан в следующей части. А сейчас рассмотрим другой, более традиционный способ написания программ на Visual Basic for Applications - посредством Редактора VBA.

Редактор VBA.

Этот редактор вызывается из меню "Сервис"-"Макросы"-"Редактор Visual Basic" или нажатием клавиш Alt-F11. Его внешний вид таков - см. рис. 3.5.

Рис. 3.5. Редактор VBA

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]