Создать такое поле можно только программно — через окно настройки это сделать нельзя (как, впрочем, и удалить их впоследствии). Для этого следует в окне отладки или в отдельном модуле выполнить команду
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 с другим можно использовать технологию ActiveX. Она основана на имеющейся в Office возможности представлять одну программу в другой как некий объект, с которым можно работать теми же командами, что используются при непосредственной работе с этой программой. Так, чтобы можно было из Word'овского макроса работать с Excel'ем, следует создать объект "Excel.Sheet":
·
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», вкладка "Палитра").
Рис. 5.3. ProgressBarв программе на VBA
Рис. 5.4. А вот как он сделан
2. Для того, чтобы форма появилась на экране, но могла быть модифицируема программно все время своего отображения, в ее код нужно поместить следующий текст:
Читать дальше