Тайны и секреты компьютера
Шрифт:
Иногда возникает необходимость вызвать из макроса какое-либо диалоговое окно, но так, чтобы такой вызов ничем не отличался от «ручного», производимого через пункты меню Word. А возможно это не всегда: так, команда "Dialogs(wdDialogEditFind). Show" действительно вызывает окно поиска, но при этом в случае ввода в него фрагмента, которого в тексте нет, не отображается сообщение о безрезультатности поиска.
Тем не менее вызвать из макроса данное окно так, чтобы оно работало точь-в-точь так же, как и «обычное», можно — для этого следует использовать имеющуюся в VBA функцию SendKeys,
Sub prog
SendKeys "^f"
End Sub
предполагая, что комбинация клавиш Ctrl+f вызывает окно «Найти», как, впрочем, устанавливается по умолчанию. Список кодов функциональных клавиш — в Справке.
Если Вы используете функцию "SendKeys", то вызванное ею окно будет вести себя абсолютно так же, как при ручном вызове. Однако помните, что если пользователь переопределит заложенную Вами в макрос комбинацию клавиш, то Ваша программа начнет работать некорректно.
· Помимо привычных кнопок и выпадающих меню в Word существует еще несколько типов элементов вызова команд и программ — поля ввода и выпадающие меню выбора. К примеру, элемент "Выпадающее меню с полем ввода" используется для указания масштаба просмотра документа на панели «Стандартная» или для ввода вопроса к справочной системе в OfficeXP.
Создать такое поле можно только программно — через окно настройки это сделать нельзя (как, впрочем, и удалить их впоследствии). Для этого следует в окне отладки или в отдельном модуле выполнить команду
CommandBars(x). Controls.Add Type:=y
где «х» — номер панели (можно узнать, просто перебрав их все с помощью команды "MsgBox CommandBars(номер). Name" и выяснив, какой номер имеет панель инструментов с нужным названием), а «y» — одна из констант: "msoControlEdit", "msoControlDropdown", "msoControlComboBox", создающие соответственно поле ввода текста, выпадающее меню и выпадающее меню с возможностью ввода текста.
Управлять созданными полями, добавляя, к примеру, в них текст, можно стандартными командами работы с панелями инструментов. Так, чтобы поместить какой-либо текст в поле ввода, следует использовать команду
CommandBars(x). Controls(y). Text = "текст в поле ввода"
где «х» — номер панели, «y» — номер по счету слева направо данного поля среди кнопок этой панели. Таким образом можно использовать эти элементы для отображения нужной пользователю информации. Точно так же — командой "a=CommandBars(x). Controls(y). Text" можно считать информацию из данного поля и использовать ее в работе программы. Следует лишь внимательно следить за соответствием номеров кнопок их реальному расположению, — при изменении порядка кнопок программа может работать неверно. Назначить макрос кнопке, меню или полю ввода можно командой "CommandBars(x). Controls(y). OnAction = "Имя модуля. Имя программы"".
· Для работы из одного приложения Office с другим можно использовать
·
Dim es As Object
Set es = CreateObject("Excel.Sheet")
Здесь «es» — простое наименование переменной, может быть любым.
(Если надо сразу открыть какой-либо файл Excel'а, то можно использовать команду "GetObject":
Set es= GetObject("Путь к файлу Excel'а"))
При желании можно сделать созданный объект Excel видимым:
es.Application.Visible = True
Теперь можно этому объекту es (т. е. просто запущенному Excel'у) посылать команды такие же, как и в макросах Excel'а (предваряя текстом "es.Application." те из команд, которые не требуют прямого указания объекта, — так как надо дать понять программе, что работа идет именно с Excel'ем). Так, чтобы открыть файл Excel'а, можно также дать команду
es.Application.Workbooks.Open FileName:="Путь к документу Excel'а"
а чтобы, например, поместить в первую ячейку открытой книги текст, используйте команду
es.Cells(1, 1). Value = "Это столбец A, строка 1"
Закрыть Excel можно командой
es.Application.Quit
Set es = Nothing
Можно даже вызвать на исполнение макрос, содержащийся в книге Excel. Для этого следует использовать команду
es.Application.Run "имя макроса"
Так что есть простор для творчества.
ProgressBar в ваших программах
Во многих программах для Windows используется такой элемент, как ProgressBar — индикатор, показывающий, на сколько продвинулся тот или иной процесс. В частности, он есть практически во всех программах-инсталляторах. К сожалению, в VBA этот элемент отсутствует, но его можно сделать самостоятельно!
Выглядеть он будет, например, так, как на рис. 5.3.
А делается он следующим образом (предполагается, что у нас есть часть программы, в которой выполняется длинный и долгий цикл: то есть известное нам количество множество однотипных операций, и которую надо снабдить ProgressBar'ом):
1. Создаем небольшую форму и помещаем на нее: надпись с пояснительным текстом (например, "Label1") и две другие надписи, (скажем, «Label2» и "Label3"), низкие и широкие, которые расположим одну над другой (рис. 5.4).
К примеру, их координаты и размеры:
Label2: Top — 45, Left — 15, Height — 15, Width — 250
Label3: Top — 45, Left — 15, Height — 15, Width — 0
Зададим в качестве фонового цвета для «Label2» — серый, а для «Label3» — зеленый (свойство «BackColor», вкладка "Палитра").