Во-первых, по умолчанию компоненты Office ХР, отвечающие за запуск макросов, на жесткий диск не ставятся — таким образом, похоже, Microsoft пытается защитить наиболее неразумных пользователей от макровирусов. По большому счету, подобные ее действия обычно приносят больше вреда, чем пользы, для авторов же программ на VBA из этого следует, что в справочных файлах к своим программам им следует упоминать о необходимости доустановки компонентов Office перед началом использования макросов.
Во-вторых, для того, чтобы иметь возможность программно копировать модули и формы макросы между документами и шаблонами, необходимо, чтобы в диалоговом окне "Сервис — Макросы — Безопасность", на вкладке "Надежные источники" имелась отметка в пункте "Доверять доступ к Visual Basic Project". Об этом тоже следует упомянуть в справке к программе.
Из появившихся новых событий в Office ХР можно отметить возможность отслеживать изменение размеров окна приложения (обработчиком события WindowSize).
В OfficeXP скопировать файл из одной папки в другую или удалить его посредством программного кода можно только при отключенной Службе индексирования (ссылка "Параметры поиска" на панели "Обычный поиск", рис. 8.10). К сожалению, по умолчанию эта Служба включена, а программно ее отключить невозможно. Поэтому, несмотря на декларируемую "совместимость сверху вниз" версий Office, автору программ на VBA настоятельно рекомендуется тестировать свои программы во всех версиях Office и отлаживать их при необходимости.
Рис. 8.10.
Более подробно о новшествах в Visual Basic for Applications в новых версиях Microsoft Office читайте в разделах их Справочных систем, которые так и называются — "Whats New for Office Developers" и, для Word, "Whats New for Word Developers".
Создавая программы для Microsoft Office, вы сможете на опыте получить представление практически обо всех современных принципах программирования: как структурных — основанных на последовательном выполнении всех команд программы, так и "событийных", согласно которым программа должна реагировать соответствующим образом на различные действия пользователя. В современном программировании используются оба этих принципа: интерфейс программ построен по принципу реакции на события, а функции, выполняемые программой — по принципу независимой работы. Например, графический редактор Paint, да и тот же текстовый процессор Word в большей своей части являются приложениями, управляемыми событиями — действиями пользователя; а, скажем, программы дефрагментации или проверки диска работают почти независимо от пользователя, он только должен задать им начальные параметры. В Visual Basic for Applications можно писать как программы, управляемые событиями (посредством разработки форм), так и работающие последовательно и независимо (используя только модули), а также, разумеется, и приложения, сочетающие в себе оба этих принципа.
Visual Basic for Applications может служить не только полноценной средой разработки приложений, работающих в Microsoft Office, но и как бы "учебным центром" по освоению принципов и различных приемов современного программирования. Работа с системным реестром, с файловой системой и даже со встроенными в Windows функциями программирования API, — все это вы сможете изучить на опыте, используя Visual Basic for Applications, причем сделать это Вам будет значительно легче, чем если бы вы сразу начали учиться программировать на Delphi или Visual Basic for Windows. Средство записи макросов, возможность легкого анализа уже написанных программ (так как фактически любая программа на Visual Basic for Applications распространяется вместе со своим исходным текстом), русский интерфейс редактора, большая и четко написанная справка, обилие примеров, — все это очень помогает в освоении этого языка и делает возможным его самостоятельное изучение — даже без использования дополнительной литературы. Другие языки программирования так освоить практически невозможно. Кроме того, редактор Visual Basic for Applications обладает большими возможностями по коррекции ошибок, и поэтому программа на этом языке вряд ли вызовет ошибку системы и необходимость перезагрузки, если только не увлекаться вызовом функций API.