Читаем без скачивания VBA для чайников - Стив Каммингс
Шрифт:
Интервал:
Закладка:
"Не забудьте приобрести молоко по пути домой."
.Checkboxes(3).Text = "Я уже приобрел молоко."
End With
Надписи могут действовать в роли кнопок, реагируя на щелчки кнопкой мыши, но только в том случае, если вы присвоите свойству BalloonType объекта окна Помощника значение msoBalloonTypeButtons. Другие значения этого свойства позволяют представлять надписи в виде нумерованных или маркированных списков (см. табл. 14.2).
Вы указываете количество кнопок и их тип, присваивая свойству Button объекта окна
Помощника значение, равное одной из констант типа msoButtonSetType. Например, если вы хотите, чтобы окно Помощника содержало три кнопки: Abort (Прервать), Retry
(Повтор) или Ignore (Игнорировать), ваш код должен иметь следующий вид: blnUpUpAndAway.Button = msoButtonSetAbortRetryIgnore
Программисту просто необходим способ определения того, на какой кнопке щелкнул пользователь или какой флажок он установил. Вот как это делается: для определения того, на какой именно кнопке щелкнул пользователь, используется значение, возвращаемое методом
Show: оно предоставляет вам число, представляющее кнопку. Вы можете присвоить это значение переменной или использовать его напрямую, как показано в следующих примерах: intButton = blnUpUpAndAway.Show
Select Case blnUpUpAndAway.Show
Case msoBalloonButtonOK
(код, выполняемый после щелчка на кнопке ОК)
Case msoBalloonButtonCancel
(код, выполняемый после щелчка на кнопке Cancel )
Case 2
(код, выполняемый после щелчка на кнопке со другой надписью]
End Select
Как видно из двух первых инструкций Case, библиотека объектов Office содержит именованные константы, которые соответствуют значениям каждого типа "обычных" кнопок (т. е. кнопок, которые отображаются в нижней части окна Помощника). Вы можете использовать эти константы для определения того, на какой именно из кнопок щелкнул пользователь.
Для определения щелчка на кнопке просто используйте номер подписи к кнопке, как показано на примере третьей инструкции Case.
Для считывания сведений о текущем состоянии флажков в окне Помощника используйте свойство Checked каждого из них после закрытия окна пользователем. В самом простейшем случае вы можете использовать последовательность операторов If ... Then, по одному оператору для каждого флажка, как показано ниже:
With blnUpUpAway
If .Checkboxes(1).Checked Then
(код, выполняемы в том случае, если флажок 1 установлен )
Else
(код, выполняемы в том случае, если флажок не 1 установлен)
End If If .Checkboxes(2).Checked Then
(код, выполняемы в том случае, если флажок 2 установлен )
Else
(код, выполняемы в том случае, если флажок 2 не установлен )
End If
End With
Вы можете использовать свойство Callback объекта Balloon для определения процедуры, которая будет обрабатывать щелчки на кнопках. Этот прием оказывается особенно полезным при использовании немодальных объектов balloon, которые остаются на экране до тех пор, пока пользователь не щелкнет на кнопке.
Сохранение значений переменных на диске
В программировании очень часто возникают ситуации, когда необходимо сохранить значения переменных во время выполнения программы. Например, давайте рассмотрим простейший случай: использование переменной-счетчика. Предположим, вам необходимо знать, сколько раз пользователь щелкнул на определенной кнопке одной из панелей инструментов Excel на протяжении месяца. Если вы только не хотите держать программу Excel постоянно запущенной на протяжении целого месяца, вам необходимо сохранять текущее значение переменной-счетчика при закрытии программы и считывать его при последующем запуске Excel.
Среди всех приложений Office только Word предоставляет вам инструменты для хранения подобных переменных (с помощью объекта Variable ). Однако с подобной задачей по силам справиться и многим другим приемам.
Сохранение и получение значений переменных в Excel, PowerPoint и Project
Пользовательские свойства документов предоставляют широкое поле для деятельности при написании программ для большинства приложений Office. Вы можете использовать VBA для создания пользовательских свойств документов, заполнения их данными, а также получения этих данных при первой необходимости. Раз подобные свойства стали неотъемлемой частью документа, с которым они связаны, вам не придется беспокоиться о сохранении свойств в отдельном файле - они автоматически сохраняются вместе с документом.
Для создания нового свойства документа в Excel, PowerPoint или Project (в Word тоже при необходимости можно воспользоваться подобным методом) выберите метод Add из коллекции свойств CustomDocuraent Properties этого документа. Приведенный ниже пример срабатывает в Excel, где объект ActiveWorkbook означает активную рабочую книгу во время выполнения процедуры (в Word и PowerPoint это объекты ActiveDocument и Active Presentation соответственно):
ActiveWorkbook.CustomDocumentProperties.Add_
Name:= "Button Count", Li nkToCont ent:=False,_
Type:= msoPropertyTypeNumber, Value:=0
Параметр LinkToContent должен иметь значение False, если вы сохраняете значение переменной в виде пользовательского свойства документа (вам следует присвоить этому параметру значение True, если вы хотите, чтобы значение свойства было связано с содержимым ячейки Excel или закладкой Word). Параметр Туре определяет тип данных для свойства; в качестве значения допустимо использование таких констант, как msoPropertyTypeNumber, msoPropertyTypeBoolean, msoPropertyTypeDate, msoPropertyTypeFloat или msoPropertyTypeString.
Для сохранения или получения информации, хранящейся в виде свойства документа, используется свойство Value объекта Property. Предположим, что вы используете такое свойство документа, как ButtonCount, для сохранения количества щелчков мышью на кнопке одной из форм программы. Приведенный ниже фрагмент кода считывает и обновляет значение свойства после каждого щелчка на кнопке:
With ActiveWorkbook._
CustomDocument Properties("ButtonCount")
.Value = .Value + 1
End With
Приведенный ниже пример иллюстрирует выполнение небольшой практической задачи. В этом случае пользователь видит сообщение о том, что он щелкнул на кнопке больше определенного количества раз, даже в том случае, если между щелчками документ неоднократно закрывался и открывался заново. Предположим, что значение константы cint Cut Of fValue задано раньше равным минимальному количество щелчков, после достижения которого сообщение отображается на экране в первый раз.
With
ActiveWorkbook.CustomDocumentProperties("ButtonCount")
' получение сохраненного значения свойства
intCurrentCount = .Value
' отображение сообщения при выполнении условия
If intCurrentCount > cintCutOffValue Then
MsgBox "Вы щелкнули на кнопке " _
& " больше " & cintCutOffValue _
& " раз."
End If
' увеличение значения свойства
.Value == intCurrentCount + 1
End With
intCurrentCount = ActiveWorkbook_
.CustomDocumentProperties("ButtonCount").Value
В Access и Excel часто удобно сохранять данные, необходимые для работы VBA программы, прямо в документе - в таблицах базы данных (Access) или ячейках листа рабочей книги (Excel). Единственная проблема, связанная с подобным подходом, состоит в том, что данные видны пользователям и их легко изменить, если только вы не предпримите предупреждающих действий.
Два остальных возможных решения для сохранения данных на диске сработают в любом приложении, поддерживающем VBA. Вы можете сохранять значения в реестре Window (и даже считывать их оттуда), используя инструкции Save Setting и Get Setting, а также сохранять данные в отдельном файле. Оба эти способа рассмотрены в главе 20.
Глава 15. Программирование на VBA в Word.
В этой главе ...
~ Объектная модель Word
~ Ключевые объекты Word: окна, выделения, диапазоны и объект Find
~ Диапазоны или выделения: что использовать при работе с текстом
~ Методы и свойства для манипуляции с текстом
~ Поиск и замена текста с помощью VBA в Word
Изо всего набора приложений Office Word предлагает наиболее богатый набор средств программирования. Знакомство с объектами Word, такими как Range и Find, иногда оказывается рискованным, но это очень важно, если вы действительно хотите создавать VBA-процедуры, раскрывающие всю мощь Word. Именно об этом мы и поговорим в настоящей главе.
Объектная модель Word содержит так много объектов и их коллекций, что вам потребуется огромный лист бумаги, если вы захотите построить на нем иерархию всех этих объектов в графическом виде. Очевидно, что я смогу рассмотреть лишь малую толику от того колоссального количества объектов, свойств и методов, которые вы сможете использовать в своих программах. В настоящей главе освещены только наиболее важные приемы работы с Word VBA. Если вы хотите получить более подробные сведения, вам придется неоднократно обращаться к справочной системе.