Шрифт:
"Я сделал так, как Вы сказали, но при вводе в появляющееся окно поиска фрагмента, которого в тексте нет, не отображается сообщение о безрезультатности поиска — как при использовании непосредственно команды "Найти". Можно ли сделать так, чтобы вызываемое окно работало точь-в-точь так же, как и обычное?"
К сожалению, с командой Dialogs… ничего сделать нельзя — так уж будет себя вести это диалоговое окно.
Однако можно использовать "финт ушами". В VBA есть функция SendKeys, которая передает активному окну нажатия клавиш — как если бы они были нажаты на клавиатуре. (Подробнее — смотрите в Справочной системе VBA.) Поэтому можно ее использовать:
Private Sub
Label1_Сlick
SendKeys "^f"
End Sub
предполагая, что комбинация клавиш Ctrl+f вызывает окно "Найти", как, впрочем, устанавливается по умолчанию. Список кодов функциональных клавиш — в Справке.
Если Вы используете функцию SendKeys, то вызванное ею окно будет вести себя абсолютно так же, как при ручном вызове. Однако помните, что если пользователь переопределит заложенную Вами в макрос комбинацию клавиш, то Ваша программа начнет работать некорректно.
ОТЛИЧИЯ НОВЫХ ВЕРСИЙ OFFICE
Отличия VBA в новых версиях Office в основном заключаются в добавлении новых функций, событий, процедур и объектов. Например, в Office 2000 появились события объекта Application, позволяющие перехватить почти любое происходящее в документе событие. Так, событие "DocumentBeforeClose" выполняется перед закрытием документа, "DocumentBeforePrint" — перед его печатью, "WindowBeforeRightClick" — сразу после клика правой кнопкой мыши в окне программы, "WindowSelectionChange" — при изменении выделения, смещении точки ввода (за исключением простого ввода текста).
В Office2000 изменилась система защиты от вирусов в макросах. Так, в Word2000 для того, чтобы иметь возможность запускать макросы, необходимо, чтобы в диалоговом окне "Сервис — Макросы — Безопасность" был установлен "Средний" или "Низкий" уровень защиты от макросов (лучше "Средний" — тогда при открытии документов с макросами пользователю будет выдан запрос о необходимости разрешения исполнения макросов).
Также в Word2000 для того, чтобы пользователь имел возможность запускать макросы из шаблонов, установленных в папку автозагружаемых файлов Word, необходимо на вкладке "Надежные источники" диалогового окна "Сервис-Макросы-Безопасность" установить отметку в пункте "Доверять всем установленным надстройкам и шаблонам". Обо всем этом следует упомянуть в документации к разрабатываемой вами программе.
То же самое верно и для Office ХР, однако отличия есть и здесь.
Во-первых, по умолчанию компоненты Office ХР, отвечающие за запуск макросов, на жесткий диск не ставятся — таким образом, похоже, Microsoft пытается защитить наиболее неразумных пользователей от макровирусов. По большому счету, подобные ее действия обычно приносят больше вреда, чем пользы, для авторов же программ на VBA из этого следует, что в справочных файлах к своим программам им следует упоминать о необходимости доустановки компонентов Office перед началом использования макросов.
Во-вторых, для того, чтобы иметь возможность программно копировать модули и формы макросы между документами и шаблонами, необходимо, чтобы в диалоговом окне "Сервис — Макросы — Безопасность", на вкладке "Надежные источники" имелась отметка в пункте "Доверять доступ к Visual Basic Project". Об этом тоже следует упомянуть в справке к программе.
Из появившихся новых событий в Office ХР можно отметить возможность отслеживать изменение размеров окна приложения (обработчиком события WindowSize).
В OfficeXP скопировать файл из одной папки в другую или удалить его посредством программного кода можно только при отключенной Службе индексирования (ссылка "Параметры поиска" на панели "Обычный поиск", рис. 8.10). К сожалению, по умолчанию эта Служба включена, а программно ее отключить невозможно. Поэтому, несмотря на декларируемую "совместимость сверху вниз" версий Office, автору программ на VBA настоятельно рекомендуется тестировать свои программы во всех версиях Office и отлаживать их при необходимости.
Рис. 8.10. Если в OfficeXP вы хотите копировать и удалять файлы с помощью VBA — выключите здесь "Службу индексирования".
Более подробно о новшествах в Visual Basic for Applications в новых версиях Microsoft Office читайте в разделах их Справочных систем, которые так и называются — "Whats New for Office Developers" и, для Word, "Whats New for Word Developers".
<