title | keywords | f1_keywords | ms.prod | api_name | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|---|---|---|
Document.Variables property (Word) |
vbawd10.chm158007322 |
vbawd10.chm158007322 |
word |
Word.Document.Variables |
93af7b84-f172-6ebd-2147-e7ebc92449c5 |
06/08/2017 |
medium |
Document.Variables property (Word)
Returns a Variables collection that represents the variables stored in the specified document. Read-only.
Syntax
expression. Variables
expression A variable that represents a Document object.
Remarks
For information about returning a single member of a collection, see Returning an object from a collection.
Example
This example adds a document variable named «Value1» to the active document. The example then retrieves the value from the Value1 variable, adds 3 to the value, and displays the results.
ActiveDocument.Variables.Add Name:="Value1", Value:="1" MsgBox ActiveDocument.Variables("Value1") + 3
This example displays the name and value of each document variable in the active document.
For Each myVar In ActiveDocument.Variables MsgBox "Name =" & myVar.Name & vbCr & "Value = " & myVar.Value Next myVar
See also
Document Object
[!includeSupport and feedback]
ВикиЧтение
VBA для чайников
Каммингс Стив
Использование переменных документа
Использование переменных документа
Отличаясь от остальных приложений Office, Word позволяет определять в вашем коде специальные переменные документа, которые сохраняются вместе с документом. Переменные документа позволяют сохранять используемые процедурой значения между сеансами редактирования.
Переменные документа создаются и используются как члены коллекции Variables в данном документе. Как и обычные документы, переменные документа характеризуются именами. Приведенная ниже инструкция присваивает значение переменной Henry обычной переменной FriendOf Anais;
FriendOfAnais = _
ActiveDocument.Variable(«Henry»).Value
Для создания новой переменной документа используется метод Add коллекции Variables, как показано ниже:
Documents(«Documentl»).Variables.Add _
Name := «TimeThisMacroHasRun», Value := 0
Вы получите сообщение об ошибке, если попытаетесь добавить уже существующую переменную документа, поэтому я рекомендую вам проверить существование соответствующего имени, прежде чем создавать новую переменную. Если это так, вы сможете получить текущее значение переменной; если нет, вы можете создать переменную и назначить ее исходное значение. Этот прием проиллюстрирован следующим примером:
For Each DocVar In ActiveDocument.Variables
If DocVar.Name = «Last Caption» _
Then Doclndex = DocVar.Index
Next DocVar
If DocEndex = 0 Then
ActiveDocument.Variables.Add _
Name := «Last Caption», Value := 1
CaptionCounter = 1
Else
CaptionCounter = _
ActiveDocument.Variables(DocIndex).Value
End If
Несмотря на то, что объектные модели других приложений Office не позволяет явно создавать переменные документа, вы можете создавать пользовательские свойства документа для решения определенных задач. Подробные сведения об использовании пользовательских свойств в качестве переменных документа изложены в главе 14.
Читайте также
Использование условных переменных
Использование условных переменных
Если код, который необходимо протестировать, выполняется не в контексте процесса, или необходим более глобальный метод для контроля новых функций, то можно использовать условные переменные. Этот подход даже более простой, чем
Именование переменных
Именование переменных
Как мы уже знаем, каждая переменная должна иметь имя, которое однозначно ее идентифицирует. Об именах переменных стоит поговорить подробнее.Прежде всего, в имени переменной могут присутствовать только латинские буквы, цифры и символы
Объявление переменных
Объявление переменных
Перед использованием переменной в коде Web-сценария рекомендуется выполнить ее объявление. Для этого служит оператор объявления переменной var, после которого указывают имя переменной:var x;Теперь объявленной переменной можно присвоить какое-либо
Функции переменных
Функции переменных
gettypeПолучает тип переменной.Синтаксис:string gettype(mixed var);Возвращает тип переменной PHP var.Возможные значения для возвращаемой строки:intvalВозвращает целочисленное значение переменной.Синтаксис:int intval(mixed var, int [base]);Возвращает целочисленное значение
loadVariablesNum — Прикрепляет группу внешних переменных к уровню документа
loadVariablesNum — Прикрепляет группу внешних переменных к уровню документа
loadVariablesNum(Глобальная функция)Прикрепляет группу внешних переменных к уровню документаСинтаксис:loadVariablesNum (url, level); loadVariablesNum (url, level, method);Аргументы:Функция loadVariablesNum() почти идентична loadVariables(), но требует
Использование переменных и выражений в моделях
Использование переменных и выражений в моделях
Развитие технологий постоянно предъявляет все более жесткие требования к инженеру-конструктору. На первое место в современном конструировании выходят скорость и динамичность выполнения проектов (чертежей или моделей) в
4. Типы переменных
4. Типы переменных
IntegerЦелочисленные переменные способны хранить только не очень большие целые числа, которые располагаются в диапазоне от –32768 до +32767. Арифметические операции над подобными числами производятся очень быстро. Для обозначения подобного типа применяется
30. Имена переменных
30. Имена переменных
Имя (идентификатор) включает в себя последовательность букв и цифр. Первый символ должен являться буквой. Знак подчерка считается буквой. C++ не ограничивает число символов в имени, но определенные части реализации находятся вне ведения автора
Объявление переменных
Объявление переменных
Как уже говорилось в главе 6, объявление — это VBA-оператор, с помощью которого вы сообщаете компилятору о своих намерениях использовать именованный объект и явно описываете тип этого объекта. Операторы объявлений чаще всего используются для
Использование переменных в операторах присваивания
Использование переменных в операторах присваивания
Можно присваивать переменным не только буквальные значения — точно так же можно присваивать и значения, определяемые другими переменными. В операторе curSalePrice = curCost * sngMargin переменной curSalePrice присваивается значение,
Пример 22-9. Использование локальных переменных при рекурсии
Пример 22-9. Использование локальных переменных при рекурсии
#!/bin/bash# факториал# ———# Действительно ли bash допускает рекурсию?# Да! Но…# Нужно быть действительно дубинноголовым, чтобы использовать ее в сценариях# на языке командной
Урок 8. Использование переменных
Урок 8. Использование переменных
Переменные представляют собой поименованные области памяти, содержащие какую-либо информацию, такую как числа или последовательность символов. Например, вы можете создать переменную и поместить в нее число 5. Если вы прибавите к данной
Отличаясь
от остальных приложений Office, Word позволяет
определять в вашем коде специальные
переменные документа, которые сохраняются
вместе с документом. Переменные документа
позволяют сохранять используемые
процедурой значения между сеансами
редактирования.
Переменные
документа создаются и используются как
члены коллекции Variables в данном документе.
Как и обычные документы, переменные
документа характеризуются именами.
Приведенная ниже инструкция присваивает
значение переменной Henry обычной переменной
FriendOfAnais;
FriendOfAnais
= ActiveDocument.Variable(«Henry»).Value
Для
создания новой переменной документа
используется метод Add коллекции Variables,
как показано ниже:
Documents(«Document1»).Variables.Add Name :=
«TimeThisMacroHasRun», Value := 0
49. Главная таблица файлов. Ntfs.
MFT
(Master File Table)главная файловая таблица в
которой хранится информация о содержимом
тома с файловой системой NTFS, представляющая
собой таблицу, строки которой соответствуют
файлам тома, а столбцы — атрибутам
файлов).
MFT
представляет собой файл (разделенный
на записи (строки), обычно размером 1
Кб), в котором хранится информация обо
всех файлах тома, в том числе и о самом
MFT. Файлами, которым отведено первые 16
записей, являются метафайлы, недоступные
операционной системе, но важные для
файловой системы NTFS, причем они дублируются
ровно посередине тома. Система не может
выполнять перемещение записей MFT-зоны
для ликвидации их фрагментации по мере
их расширения, поэтому сразу после
форматирования NTFS том делится как бы
на две части: служебную область, которая
предоставляется под использование
«юзером» и зарезервированную под
MFT (12.5 %). Механизм использования MFT-зоны
достаточно гибок, и когда файловое
пространство заполняется, то MFT-зона
просто сокращается, а когда в файловом
пространстве появится свободное место,
то она может быть вновь расширена.
MFT-зона сохраняется целой как можно
дольше, так как при её расширении она
может фрагментироваться, что нежелательно
в связи с возможностью понижения скорости
работы с томом.
50. Структура файловых ссылок
Файл
на томе NTFS идентифицируется 64-битным
значением, которое называется файловой
ссылкой (file reference). Файловая ссылка
состоит из номера файла и номера
последовательности. Номер файла равен
позиции его записи в MFT минус 1 (или
позиции базовой записи в MFT минус 1, если
файл требует несколько записей). Номер
последовательности в файловой ссылке
увеличивается на 1 при каждом повторном
использовании позиции записи в MFT, что
позволяет NTFS проверять внутреннюю
целостность файловой системы
54.
Файловая система FAT.
Основные характеристики.
FAT
(File Allocation Table) – таблица
расположения
файлов.
MBR |
PT |
VBS |
FAT1 |
FAT2 |
RD |
DATA |
MBR
– главная
загрузочная область
PT
– таблица
разделов
VBS
– загрузочный
сектор тома
FAT1,
FAT2 – таблица
размещения файлов
RD
– корневой
каталог
FAT
создается утилитой FORMAT.
Она идет вместе с FDISK,
с помощью которой разбивается на разделы.
При записи файла на диск информация о
нем записывается в корневой каталог. В
поле указатель записывается номер
начального кластера. По этому номеру
система обращается в ячейку таблицы с
таким же номером где будет записан номер
следующего класса. Запись заканчивается
командой STOP.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
You can’t just type in Help+Manual variables as plain text as you can in a PDF template. To use Help+Manual variables in your Word DOCX templates you need to enter the variable in a Word field.
You can enter Help+Manual variables in any Word fields that get resolved to text. Help+Manual will find them and replace them with the variable value when you publish with the DOCX template. However, there are a two field types that you will probably find most useful: Comment fields and document properties.
Comment fields
These fields are best for inserting variables inside paragraphs or other items. Don’t confuse them with the Word comments feature! That is for peer review and is completely different – variables entered in Word comments won’t work.
To enter a comment field with a Help+Manual variable in Word:
1.Open the DOCX template in Word and click in the place where you want to insert the variable.
2.Select the tab in Word, then in the group select to open the Field dialog.
3.Select Comments in the box, then type in the Help+Manual variable in the box, using the format <%VARIABLE_NAME%>.
Document properties fields
You can see examples of these fields in some of the standard DOCX templates included with Help+Manual. They are used for the Title, Author, Year, Abstract and Company Information items displayed on the cover page, for example.
To enter a document properties field with a Help+Manual variable in Word:
1.Open the DOCX template in Word and click in the place where you want to insert the variable.
2.Select the tab in Word, then in the group select and then the property you want to insert.
3.This inserts the property item as a box on the page containing a field. Then type in the Help+Manual variable in the empty field, using the format <%VARIABLE_NAME%>.
Работа с полями документа
Поля (коллекция Fields ) используются в документах Word достаточно широко и играют множество самых разных ролей. Поэтому стоит поговорить о них подробнее. В зависимости от назначения поля оно относится к одной из 9 возможных категорий. Нет смысла и возможности заниматься полным анализом этих категорий, но некоторые основные роли, которые играют поля, я перечислю:
- Поля могут хранить в документе некоторую обновляемую информацию. Такими полями являются поля Date и Time из категории Date and Time, хранящие текущую дату и текущее время. В полях Author, FileName, KeyWords, NumPages и других полях из категории Document Information содержится подробная информация о документе авторе документа, файле, в котором он находится, числе занимаемых страниц. В полях UserName и UserAddress из категории User Information хранится информация о фамилии и адресе владельца компьютера, используемая по умолчанию для создания поля Author документа, для создания обратного адреса по умолчанию при работе с конвертами. Эта роль полей достаточно понятна. Ясно, как программно и вручную можно работать с такими полями. Заметим, что значения некоторых из упомянутых полей меняются автоматически, например, время, дата, число страниц документа (число страниц документа — 57, число символов — 149609, дата — 01.07.2006, время — 9:27 )
Я только что вставил в текст, указанный в скобках, ряд полей и получил текущую информацию. За время печати этого замечания значения некоторых из этих полей число символов документа и время изменились.
- Поля играют важную роль при создании документов с помощью слияния. Зачастую возникает необходимость создания группы однотипных документов, отличающихся лишь небольшими деталями. Типичным примером такого рода является группа рассылаемых писем, отличающихся адресом, названием компании и другими деталями. В этом случае создается главный документ, содержащий шаблон письма с полями и документ, хранящий источник данных. Поля главного документа задают переменную часть письма адрес, название компании и другие данные. Значения этих данных хранятся в источнике данных, который может быть таблицей Word, Access или Excel. Слияние главного документа с одной записью источника данных (строкой таблицы) приводит к появлению нового документа (письма). В слиянии могут участвовать как все записи источника данных, так и только часть из них, выбранная по запросу. В результате возникает необходимая совокупность писем. Имена полей в этом случае могут быть произвольными и представляют имена столбцов в таблице, задающей источник данных. Помимо этих полей в главном документе могут встречаться и поля Word из тех 9 категорий, о которых я уже говорил. В ситуациях слияния часто используются такие поля как Ask и Fill-In, позволяя в момент слияния запросить и добавить в документ индивидуальную информацию, не хранящуюся в записях источника данных. Поле Fill-In позволяет запросить данные при создании документа и сделать полученный ответ значением этого поля. Поле Ask работает аналогичным образом, за тем исключением, что ответ не становится значением поля, а связывается с некоторой создаваемой в этот момент закладкой. Затем эту закладку можно использовать в документе различными способами, принятыми для закладок. На деталях работы вручную останавливаться не буду, но пример такого главного документа приведу:
Рис.
1.14.
Главный документ с полями разных типовЗаметьте, поля в главном документе подсвечены и среди них есть как поля, заданные источником данных, так и общие для Word поля, Ask, Fill-In, Formula, Date. Вот как выглядит источник данных, с которым я проводил эксперименты:
Чтобы картина была полной, взгляните на один из документов, полученных в результате слияния главного документа и источника данных:
Рис.
1.16.
Документ, полученный слиянием главного документа и источника данных - Еще одним видом документа Word, использующим поля, является электронная форма. Необходимость в таких документах возникает, например, при пересылке анкет по электронной почте. Получатель формы заполняет поля анкеты, которые могут быть элементами управления: обычными текстовыми окнами ввода, флажками или выпадающими списками. Как поля они имеют имена: FormTextBox, FormCheckBox, FormDropDown.
- Говоря о полях, нельзя не упомянуть о таком важном и интересном поле, как поле Formula, позволяющее организовывать вычисления в документах Word. Эти вычисления, чаще всего, организуются в ячейках таблиц Word, но могут быть вставлены и в произвольное место документа. Пример такого поля приведен в главном документе. Строятся формулы аналогично формулам Excel и могут работать как с закладками, используемыми в качестве имен переменных, так и с ячейками таблиц Word. При вычислениях можно использовать некоторые из встроенных функций, допустимых в Excel. Тема вычислений в документах Word , его таблицах заслуживает, конечно, более подробного освещения, чем эти несколько строчек. Но обо всем сказать, нам не дано.
- Есть и другие случаи применения полей в документах Word. Например, поля автоматически создаются при создании таблиц ссылок, о которых я рассказывал ранее.
Я постарался кратко описать достаточно сложную тему работы с полями в документах Word. Конечно, обычно работа с полями выполняется вручную. Вряд ли, например, есть смысл создавать документ слияния программным путем. Поэтому, говоря о программировании работы с полями, я ограничусь достаточно простыми примерами. В основе программной работы с полями лежит работа с коллекцией полей Fields (Field). В следующем примере анализируются (печатаются) основные свойства объекта Field:
Public Sub FieldsAnalise() 'Анализирует характеристики полей активного документа Dim MyField As Field With ActiveDocument Debug.Print "Число полей - ", .Fields.Count For Each MyField In .Fields With MyField Debug.Print "Код поля - ", .Code, _ "Вид поля - ", .Kind, _ "Тип поля - ", .Type, _ "Результат поля - ", .Result End With Next MyField End With End Sub
Листинг
1.45.
Приведем результаты отладочной печати для главного документа, имеющего обширную коллекцию полей разного типа:
Число полей - 12 Код поля - DATE * MERGEFORMAT Вид поля - 2 Тип поля - 31 Результат поля - 13.12.99 Код поля - MERGEFIELD Country Вид поля - 2 Тип поля - 59 Результат поля - "Country" Код поля - MERGEFIELD City Вид поля - 2 Тип поля - 59 Результат поля - "City" Код поля - MERGEFIELD Address Вид поля - 2 Тип поля - 59 Результат поля - "Address" Код поля - MERGEFIELD FirstName Вид поля - 2 Тип поля - 59 Результат поля - "FirstName" Код поля - MERGEFIELD LastName Вид поля - 2 Тип поля - 59 Результат поля - "LastName" Код поля - MERGEFIELD HomePhone Вид поля - 2 Тип поля - 59 Результат поля - "HomePhone" Код поля - MERGEFIELD FirstName Вид поля - 2 Тип поля - 59 Результат поля - "FirstName" Код поля - FILLIN "Введите имя (имена) близких!" d "Близкие тебе люди" Вид поля - 2 Тип поля - 39 Результат поля - Близкие тебе люди Код поля - ASK Vremya "Сколько лет не виделись?" d "1" Вид поля - 2 Тип поля - 38 Результат поля - 2 Код поля - Ref Vremya Вид поля - 2 Тип поля - 3 Результат поля - 2 Код поля - = Vremya *365*24*60 Вид поля - 2 Тип поля - 34 Результат поля - 1051200
Листинг
1.46.
Большинство полей в этом документе это поля слияния (MergeField), значения которых берутся из источника данных в момент слияния главного документа с записями источника данных. Обратите внимание, ситуация с полями напоминает ситуацию с ячейками Excel, с одной стороны в ячейке содержится формула (в поле код поля), с другой стороны вычисленное по формуле значение (результат поля). По желанию всегда можно включить просмотр в полях либо кода поля, либо результата. По умолчанию, также как и для ячеек Excel, показывается результат поля. Свойство Kind, которое для всех полей нашего документа имеет одинаковое значение, указывает на то, как происходит автоматическое обновление значения поля, имеет ли поле результат.
Для программного создания полей используется, как обычно, метод Add коллекции Fields. Он имеет следующий синтаксис:
Add(Range, Type, Text, PreserveFormatting)
Листинг
1.47.
Параметр Range определяет область документа, в которую вставляется поле, Type тип поля, из-за разнообразия типов этот параметр имеет около сотни различных значений. Параметр Text чаще всего используется в тех случаях, когда нужно задать переключатели, определяющие специфику работы поля. Последний параметр определяет, будет ли сохраняться форматирование при обновлении значения поля.
Рассмотрим теперь пример программного добавления полей в документ. Я ограничусь достаточно простой ситуацией. Добавим в начало документа три поля, задающие автора документа, дату и время:
Public Sub CreateFields() 'Работа с полями With ActiveDocument 'Добавление полей разного типа в начало документа Dim myRange As Range 'Установить автора документа ' .Name = "Vladimir Billig" Set myRange = .Range(Start:=0, End:=0) .Paragraphs.Add myRange .Paragraphs.Add myRange .Paragraphs.Add myRange myRange.Move Unit:=wdParagraph, Count:=-3 .Fields.Add Range:=myRange, Type:=wdFieldAuthor myRange.Move Unit:=wdParagraph, Count:=1 .Fields.Add Range:=myRange, Type:=wdFieldDate myRange.Move Unit:=wdParagraph, Count:=1 .Fields.Add Range:=myRange, Type:=wdFieldTime 'Еще один способ добавления полей на примере 'добавления поля автора с одновременным изменением автора документа myRange.Move Unit:=wdParagraph, Count:=1 myRange.Select .Fields.Add Range:=myRange, Type:=wdFieldEmpty, _ PreserveFormatting:=False Selection.TypeText Text:="Author ""Fooler""" 'Печать полей FieldsAnalyse 'Обновление полей .Fields.Update FieldsAnalyse End With End Sub
Листинг
1.48.
В этой процедуре добавляются три пустых абзаца в начало документа, а затем добавляются три поля. Затем демонстрируется еще один способ работы с полями, когда вначале задается пустое поле, а потом в нем печатается текст, определяющий это поле. Конечно, это должен быть разумный текст, определяющий тип поля и его характеристики. Так, зачастую, работают с полями вручную. Заметьте, необходимо обновить это поле, чтобы поле отражало значение результата. Печать результатов до обновления и после обновления позволяет проследить за изменениями значений полей. Приведем результаты отладки:
Число полей - 4 Код поля - Author * MERGEFORMAT Вид поля - 2 Тип поля - 17 Результат поля - Vladimir Billig Код поля - DATE * MERGEFORMAT Вид поля - 2 Тип поля - 31 Результат поля 14.12.99 Код поля - TIME * MERGEFORMAT Вид поля - 2 Тип поля - 32 Результат поля - 12:28 Код поля - Author "Fooler" Вид поля - 0 Тип поля --1 Результат поля - Число полей - 4 Код поля - Author * MERGEFORMAT Вид поля - 2 Тип поля - 17 Результат поля - Vladimir Billig Код поля - DATE * MERGEFORMAT Вид поля - 2 Тип поля - 31 Результат поля - 14.12.99 Код поля - TIME * MERGEFORMAT Вид поля - 2 Тип поля - 32 Результат поля - 12:28 Код поля - Author "Fooler" Вид поля - 2 Тип поля - 17 Результат поля - Fooler
Листинг
1.49.
Работа с фрагментами
StoryRanges(Range) — эта коллекция представляет совокупность частей документа, называемых фрагментами (Story). Количество различных фрагментов документа фиксировано. Нельзя добавлять элементы в эту коллекцию обычным способом, используя метод Add. Фрагменты появляются в коллекции, когда создается соответствующая часть документа. В этот момент определяется и тип фрагмента. Фрагменты имеют тип, задаваемый константами из перечисления wdStoryType. Главный фрагмент, конечно, — текст документа, тип которого задается константой wdMainTextStory. Фрагментами других типов являются комментарии, ссылки, колонтитулы. Заметьте: сам фрагмент является объектом Range. Так что благодаря фрагментам можно, например, работать с коллекцией комментариев, как с единой областью.
Приведем пример, где анализируются типы фрагментов активного документа:
Public Sub WorkWithStory() 'Работа с фрагментами (story) 'Анализ возможных типов фрагментов акивного докуммента Dim curstory As Range With ActiveDocument For Each curstory In .StoryRanges Select Case curstory.StoryType Case wdMainTextStory Debug.Print "Начало текста:", curstory.Paragraphs(1).Range.Text Case wdCommentsStory Debug.Print "Комментарии:", curstory.Text Case wdEndnotesStory Debug.Print "Концевые ссылки:", curstory.Text Case wdFootnotesStory Debug.Print "Подстраничные ссылки:", curstory.Text Case Else Debug.Print "Фрагмент другого типа:", curstory.Text End Select Next curstory End With End Sub
Листинг
1.50.
Тестовый документ состоит из фрагментов четырех типов, так как он, кроме текста, содержит комментарии и два типа ссылок. Вот результаты отладочной печати:
Начало текста: Vladimir Billig Подстраничные ссылки: документ DocTwo используется для экспериментов. Концевые ссылки: документ DocThree используется для экспериментов. Комментарии: Page: 2 Программный проект этого документа содержит примеры главы 1
Листинг
1.51.
Переменные, которые живут долго
У переменных век не долог. Локальные переменные, как правило, заканчивают существование в момент окончания работы процедуры, в которой они описаны. Глобальные переменные живут дольше, некоторые из них могут быть доступными в разных программных проектах системы документов в процессе работы с этими документами.
Однако и локальные и глобальные переменные «умирают» по окончании сеанса работы. Для того чтобы сохранять данные между сеансами работы, необходимо использовать файлы, базы данных и другие внешние источники даных. Замечу, что, конечно, есть еще возможность хранить данные, как часть самого документа, например, в таблицах Word или Excel. Но сейчас мы поговорим еще об одной интересной возможности, предоставляемой при работе с офисными документами. С каждым из документов можно связать коллекцию переменных типа Variant коллекцию Variables(Variable). Эта коллекция для программистов важна — ведь время жизни входящих в нее переменных совпадает со временем жизни документа. По существу речь идет о некотором специальном файле переменных, жестко связанном с самим документом и хранящимся вместе с ним. Тем самым появляется возможность сохранять информацию о работе документе между сеансами. Применения этого полезного средства могут быть самыми разными. Можно сохранять предпочтения, сделанные пользователем при первом сеансе работы с документом, различные настройки документа и так далее. Другое применение связано с предоставлением документа во временное владение с ограничением числа возможных запусков. Например, можно иметь счетчики, подсчитывающие количество вызовов некоторой процедуры и в зависимости от значения счетчика по-разному определять дальнейшую работу с данным документом. Переменные, входящие в коллекцию Variables, создаются не так, как обычные переменные, нет необходимости в их описании в разделе объявлений какого либо модуля. Они имеют фиксированный тип Variant и создаются методом Add, типичным для создания элементов коллекций. Этот метод имеет достаточно прозрачный синтаксис:
Function Add(Name As String, [Value]) As Variable
Листинг
1.52.
В момент создания задается имя переменной и, возможно, инициализирующее ее значение. Тип, как я уже говорил, установлен по умолчанию.
Вот несколько процедур, демонстрирующих работу с такими переменными. В частности, я показываю возможность отключения демо версии системы после завершения разрешенного числа запусков. Начнем с процесса создания переменной, являющейся счетчиком, следящим за числом запусков. Взгляните на соответствующую процедуру и вызываемую в ней функцию:
Public Sub CreateVar() 'Создание переменных - хранителей информации With ActiveDocument.Variables If Not ExistVar("Counter") Then 'Добавляем переменную .AddName:="Counter", Value:=0 End If End With End Sub Public Function ExistVar(Name As String) As Boolean 'Определяет наличие переменнойName в коллекции Variables Dim MyVar As Variable ExistVar = False For Each MyVar In ActiveDocument.Variables If MyVar.Name =Name Then ExistVar = True: Exit For End If Next MyVar End Function
Листинг
1.53.
При попытке повторного добавления одной и той же переменной в коллекцию Variables возникает ошибка. В тоже время процедура, в которой происходит добавление, может выполняться многократно. Поэтому я предусматриваю соответствующую проверку на существование переменной с заданным именем в коллекции Variables. Может возникнуть вопрос, куда поместить процедуру CreateVar, создающую переменную. Я поместил ее в процедуру, обрабатывающую событие «Open» документа, но можно упрятать этот вызов и более глубоко. Рассмотрим теперь, как происходит работа с переменной Counter:
Public Sub CheckCounter() Const Limit = 10 'Счетчик Counter может быть использован в любой процедуре, 'позволяя следить за числом ее выполнения With ActiveDocument If .Variables("Counter") > Limit Then 'Исчерпан лимит нормальной работы демо-версии Call MsgBox("Исчерпан лимит работы демо-версии", _ vbCritical, "Конец работы!") Else ' продолжаем нормальную работу Dim myLocal As Integer 'Локальные переменные могут работать с глобальным счетчиком myLocal = .Variables("Counter") Debug.Print "Счетчик = "; myLocal 'В конце работы увеличиваем значение счетчика myLocal = myLocal + 1 .Variables("Counter") = myLocal End If End With End Sub
Листинг
1.54.
Экспериментируя с тестовым документом, я открывал и закрывал его многократно, время от времени, вызывая процедуру CheckVar. После 11 ее запусков нормальное выполнение было прервано и выдалось предупреждающее сообщение: