Чтение онлайн

ЖАНРЫ

Интернет-журнал "Домашняя лаборатория", 2007 №7
Шрифт:

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

Так, чтобы можно было из Word'oвoro макроса работать с Excel'ем, следует создать объект Excel.Sheet (здесь "es" — простое наименование переменной, у вас может быть любым).

Dim es As Object

Set es = CreateObject("Excel.Sheet")

Если надо сразу открыть

какой-либо файл Excel'а, то можно использовать команду GetObject:

Set es= GetObject("Путь к файлу Excel'a")

При желании можно сделать созданный объект Excel видимым:

es.Application.Visible = True

Теперь можно этому объекту es (т. е. просто запущенному Excel'у) посылать команды такие же, как и в макросах Excel'a (предваряя текстом "es.Application." те из команд, которые не требуют прямого указания объекта, — так как надо дать понять программе, что работа идет именно с Excel'ем). Так, чтобы открыть файл Excel'а, можно также дать команду

es.Application.Workbooks.Open FileName:="Путь к файлу Excel'a"

а чтобы, например, поместить в первую ячейку открытой книги текст, используйте команду

es.Cells(1, 1).Value = "Это столбец А, строка 1"

В принципе я бы вам посоветовал поместить тот макрос, который Вы планировали для Excel'a, именно в исходный Word'oBbrii, переписав его команды в соответствии с принципом связывания (т. е. управления одним приложением из другого — так, как описано выше).

Закрыть Excel можно командой

es.Application.Quit

Set es= Nothing

Если работать с таблицей из Word почему-либо нельзя, и требуется именно вызвать Excel'евский макрос, то для вызова макроса следует использовать команду

es.Application.Run "имя макроса"

Также можно автоматически запустить какой-либо макрос при открытии файла Excel:

es.Application.Workbooks.Open FileName:="Путь к файлу Excel'а!имя макроса" (например, es.Application.Workbooks.Open FileName:="c: \bookl.xls!macrl", точно так же, разделяя имя файла и имя макроса восклицательным знаком — и в команде Shel1)

В общем, есть простор для творчества. Про работу из Word'а с Excel'ем и т. д. почитайте разделы Справки VBA (для Microsoft Office 97 — по-русски): "Работа с приложениями", "Функция CreateObject", "Функция GetObject", "Программирование объектов".

8.

"Можно ли в "Word, при помощи гиперссылки вызвать команду меню, в частности команду "Найти"?"

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

Конструктора", добавить элемент "Надпись", в меню правой кнопки мыши выбрать "Свойства", в разделе Caption поместить текст ссылки, оформить шрифт и цвет текста в соответствующем разделе Свойств, затем из меню правой кнопки мыши выбрать "Исходный текст", а в появившийся макрос вписать команду

Private Sub Label1_С1ick

On Error Resume Next

Dialogs(wdDialogEditFind).Show

End Sub

или любые другие,

какие пожелаете. После того, как Вы отключите Режим конструктора, созданная надпись с гиперссылкой будет работать так, как Вы желаете — при нажатии на нее вызовется окно поиска текста.

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

К сожалению, с командой 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 перед началом использования макросов.

Поделиться с друзьями: