Как сделать переменные, хранящиеся в каждом отдельном докуме

Программирование на Visual Basic for Applications
batmax
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 06.08.2004 (Пт) 20:32

Как сделать переменные, хранящиеся в каждом отдельном докуме

Сообщение batmax » 06.08.2004 (Пт) 20:35

В VBA, насколько я понимаю, все глобальные переменные - междокументные.
Иногда это неудобно. Нельзя ли "прикрепить" переменные к каждому отдельному документу, возможно, используя объектную технологию ?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.08.2004 (Пт) 21:36

Variables Collection Object
See Also Properties Methods Events Specifics

Documents (Document)
Variables (Variable)


A collection of Variable objects that represent the variables added to a document or template. Document variables are used to preserve macro settings in between macro sessions.

Using the Variables Collection
Use the Variables property to return the Variables collection. The following example displays the number of variables in the document named "Sales.doc."
Код: Выделить всё
MsgBox Documents("Sales.doc").Variables.Count & " variables"

Use the Add method to add a variable to a document. The following example adds a document variable named "Temp" with a value of 12 to the active document.
Код: Выделить всё
ActiveDocument.Variables.Add Name:="Temp", Value:="12"

If you try to add a document variable with a name that already exists in the Variables collection, an error occurs. To avoid this error, you can enumerate the collection before adding any new variables. If the Blue document variable already exists in the active document, the following example sets its value to 6. If this variable doesn't already exist, this example adds it to the document and sets it to 6.
Код: Выделить всё
For Each aVar In ActiveDocument.Variables
    If aVar.Name = "Blue" Then num = aVar.Index
Next aVar
If num = 0 Then
    ActiveDocument.Variables.Add Name:="Blue", Value:=6
Else
    ActiveDocument.Variables(num).Value = 6
End If

Use Variables(index), where index is the document variable name or the index number, to return a single Variable object. The following example displays the value of the Temp document variable in the active document.
Код: Выделить всё
MsgBox ActiveDocument.Variables("Temp").Value

The index number represents the position of the document variable in the Variables collection. The first variable added to the Variables collection is index number 1; the second variable added to the collection is index number 2, and so on. The following example displays the name of the first document variable in the active document.
Код: Выделить всё
MsgBox ActiveDocument.Variables(1).Name

To add a variable to a template, open the template as a document by using the OpenAsDocument method. The following example stores the user name (from the Options dialog box) in the template attached to the active document.
Код: Выделить всё
ScreenUpdating = False
With ActiveDocument.AttachedTemplate.OpenAsDocument
    .Variables.Add Name:="UserName", Value:= Application.UserName
    .Close SaveChanges:=wdSaveChanges
End With

batmax
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 06.08.2004 (Пт) 20:32

Сообщение batmax » 09.08.2004 (Пн) 13:31

Спасибо, конечно, НО...
Variables Collection - у тебя какая версия VBA ? У меня в 6.3 такого нигде нету. (Я программирую в Автокаде 2000-2004 и Офисе 2000).

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.08.2004 (Пн) 13:32

Это не в VBA, это коллекция в документе Word.
Можно создать класс и в классе объявить нужные переменные как Public.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.08.2004 (Вт) 11:04

batmax писал(а):Спасибо, конечно, НО...
Variables Collection - у тебя какая версия VBA ? У меня в 6.3 такого нигде нету. (Я программирую в Автокаде 2000-2004 и Офисе 2000).

В Word2000 точно есть, Автокад никогда не видел.

TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

IMHO

Сообщение TEH3OP » 10.08.2004 (Вт) 14:30

Некогда проверять, так что не отвечаю что так точно можно делать.
Что если к каждому документу Property добавить, которое будет возвращать значение Private переменной уровня модуля данного документа.

Попробуйте -- вдруг...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: IMHO

Сообщение tyomitch » 10.08.2004 (Вт) 16:11

TEH3OP писал(а):Некогда проверять, так что не отвечаю что так точно можно делать.
Что если к каждому документу Property добавить, которое будет возвращать значение Private переменной уровня модуля данного документа.

Попробуйте -- вдруг...

Имхо не заработает. С чего бы вдруг?
Проверять тоже лень :lol:


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 100

    TopList