Интернет-журнал "Домашняя лаборатория", 2007 №3
Шрифт:
es.Cells(1, 1).Value = "Это столбец А, строка 1"
Закрыть Excel можно командой
es.Application.Quit
Set es = Nothing
Можно даже вызвать на исполнение макрос, содержащийся в книге Excel. Для этого следует использовать команду
es.Application.Run "имя макроса"
Так что есть простор для творчества.
ProgressBar в ваших программах
Во многих программах для Windows используется такой элемент, как ProgressBar — индикатор, показывающий, на
Выглядеть он будет, например, так, как на рис. 5.3.
Рис. 5.3. ProgressBar в программе на VBA
А делается он следующим образом (предполагается, что у нас есть часть программы, в которой выполняется длинный и долгий цикл: то есть известное нам количество множество однотипных операций, и которую надо снабдить ProgressBar'ом):
1. Создаем небольшую форму и помещаем на нее: надпись с пояснительным текстом (например, "Label1") и две другие надписи, (скажем, "Label2" и "Label3"), низкие и широкие, которые расположим одну над другой (рис. 5.4).
Рис. 5.4. А вот как он сделан
К примеру, их координаты и размеры:
Label2: Тор — 45, Left — 15, Height — 15, Width — 250
Label3: Top — 45, Left — 15, Height — 15, Width — 0
Зададим в качестве фонового цвета для "Label2" — серый, а для "Label3" — зеленый (свойство "BackColor", вкладка "Палитра").
2. Для того, чтобы форма появилась на экране, но могла быть модифицируема программно все время своего отображения, в ее код нужно поместить следующий текст:
Private Sub UserForm_Activate
… остальной текст программы, которая должна выполняться во время отображения ProgressBar' а…
Unload Me
End Sub
Все, что находится в теле этого обработчика, будет выполняться, в то время как форма будет находиться на экране. По окончании выполнения программы форма будет выгружена (хотя выгружать ее не обязательно, если после окончания программы в обработчике предполагается продолжение работы с формой). Однако никакие другие события формой обрабатываться в это время не будут.
3. Идея такова. Ширину третьей надписи "Label3" можно изменять программно. Поэтому для отображения ProgressBar'а надо вставить в код строки, изменяющие ширину этой надписи. К примеру, цикл в программе выполняется n раз. Тогда ширина надписи "Label3" будет определяться командой в теле цикла по формуле "Label3.Width = (scet/n)*250", где "scet" — это счетчик цикла, а 250 — ширина надписи Label2.
После каждой такой команды надо вставлять инструкцию "Me.Repaint", чтобы перерисовать форму с учетом новых параметров третьей надписи, — автоматической перерисовки до полного отображения формы (которое
Итак, код для формы с ProgressBar'ом должен иметь такой вид ("п" — количество необходимых выполнений цикла):
Private Sub UserForm_Activate
Me.Repaint
For t=1 to n
… необходимые команды программы в цикле….
Label3.Width = ((t/n)*250)
Me.Repaint
Next t
Unload Me
End Sub
Разумеется, в нем возможны изменения и улучшения. Можно несколько раз использовать ProgressBar в одной форме, каждый раз обнуляя ширину третьей надписи. Можно поместить на одну форму несколько ProgressBar'ов, где один, например, показывает выполнение всего задания, а другой — его текущей части.
Хранение скрытой информации в документе Иногда автору программы необходимо записать в документ информацию "для внутреннего пользования": например, чтобы при следующей обработке документа программой использовать определенные предыдущие данные.
Можно, конечно, использовать Свойства документа (объект "Dialogs(wdDialogFileSummarylnfo).Comments"), но лучше сделать такую запись с помощью добавления специальной переменной прямо в документ Word:
ActiveDocument.Variables.Add Name:="x1", Value:="Текст"
ActiveDocument.Variables.Add Name:="x2", Value:=12
Прочитать эти переменные можно будет с помощью похожей функции:
y1 = ActiveDocument.Variables("x1").Value
y2 = ActiveDocument.Variables("x2").Value
Кроме как с помощью этой функции, значения заданных в документе переменных узнать нельзя никак! Таким способом можно помещать в документ служебную информацию для макросов: сохраненные параметры, скрытые комментарии и и.д. Но не думайте, что для надежного сокрытия секретной информации достаточно поместить ее в переменные документа — с помощью функции
For Each per In ActiveDocument.Variables
Debug.Print per.Name + " " + per.Value
Next per
абсолютно все переменные будут благополучно помещены в окно отладки, где их легко и просто можно просмотреть.
Немного о панелях, шаблонах и макросах Панель инструментов Microsoft Word 97/2000/ХР — то есть ее название, набор кнопок, расположенных на ней, связь этих кнопок с командами и макросами — может храниться либо в шаблоне Microsoft Word 97/2000/ХР (*.dot), либо в документе Word (*.doc). При этом имеет место быть следующее:
1. Если панель инструментов сохранена в Normal.dot, то она доступна всегда, когда открыт Word.
2. Если панель инструментов сохранена в шаблоне, который загружен как глобальный — то есть помещен в папку автозагружаемых файлов Word, то она также доступна всегда, когда открыт Word, но ее можно убрать, выгрузив шаблон с помощью диалогового окна "Сервис-Шаблоны и надстройки".
3. Если панель инструментов сохранена в шаблоне, на котором основаны документы, например, в одном из шаблонов, находящихся в папке шаблонов пользователя Word[14] и ее подпапках, то она доступна тогда, когда этот шаблон присутствует на компьютере и активен документ, созданный на его основе.