Private Sub UserForm_Activate()
… остальной текст программы, которая должна выполняться во время отображения ProgressBar'а …
Unload Me
End Sub
Все, что находится в теле этого обработчика, будет выполняться, в то время как форма будет находиться на экране. По окончании выполнения программы форма будет выгружена (хотя выгружать ее не обязательно, если после окончания программы в обработчике предполагается продолжение работы с формой). Однако никакие другие события формой обрабатываться в это время не будут.
3. Идея такова. Ширину третьей надписи «Label3» можно изменять программно. Поэтому для отображения ProgressBar'а надо вставить в код строки, изменяющие ширину этой надписи. К примеру, цикл в программе выполняется n раз. Тогда ширина надписи «Label3» будет определяться командой в теле цикла по формуле " Label3.Width = (scet / n) * 250", где " scet" — это счетчик цикла, а 250 — ширина надписи Label2.
После каждой такой команды надо вставлять инструкцию " Me.Repaint", чтобы перерисовать форму с учетом новых параметров третьей надписи, — автоматической перерисовки до полного отображения формы (которое произойдет, когда кончится обработка события " UserForm_Activate()"и форма не будет выгружена) не происходит. Если форма с ProgressBar'ом должна долго находится на экране без изменений, то рекомендуется почаще использовать команду " Me.Repaint", так как без перерисовки внешний вид формы может быть легко испорчен окнами других приложений, когда пользователь решит воспользоваться ими во время работы макроса.
Итак, код для формы с ProgressBar'ом должен иметь такой вид ("n" — количество необходимых выполнений цикла):
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(wdDialogFileSummaryInfo). 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/XP — то есть ее название, набор кнопок, расположенных на ней, связь этих кнопок с командами и макросами — может храниться либо в шаблоне Microsoft Word 97/2000/XP (*.dot), либо в документе Word (*.doc). При этом имеет место быть следующее:
1. Если панель инструментов сохранена в Normal.dot, то она доступна всегда, когда открыт Word.
2. Если панель инструментов сохранена в шаблоне, который загружен как глобальный — то есть помещен в папку автозагружаемых файлов Word, то она также доступна всегда, когда открыт Word, но ее можно убрать, выгрузив шаблон с помощью диалогового окна "Сервис-Шаблоны и надстройки".
3. Если панель инструментов сохранена в шаблоне, на котором основаны документы, например, в одном из шаблонов, находящихся в папке шаблонов пользователя Word [14] Местонахождение папки шаблонов можно посмотреть в окне Сервис-Параметры-Расположение. Для Word97 по умолчанию назначается папка. \Microsoft Office\Office\Шаблоны, а для Word2000 — C: \Windows\Application Data\Microsoft\Шаблоны.
и ее подпапках, то она доступна тогда, когда этот шаблон присутствует на компьютере и активен документ, созданный на его основе.
Читать дальше