1

Тема: ActiveDocument.Variables начальное значение при создании

Когда переменная Word создается (и ранее ее не было), то ее значение равно " ", то есть строковая переменная, которая содержит пробел? Это верно?

У меня работает такой код:

Добавляю новую переменную:

ActiveDocument.Variables.Add Name:=strVariableName

Записываю в нее значение, если инициализации не было

If ActiveDocument.Variables.Item(strVariableName).Value = " " Then
    ActiveDocument.Variables.Item(strVariableName).Value = intValue
End If
Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

2

Re: ActiveDocument.Variables начальное значение при создании

Александр Б. пишет:

Когда переменная Word создается (и ранее ее не было), то ее значение равно " ", то есть строковая переменная, которая содержит пробел? Это верно?

У меня работает такой код:

Добавляю новую переменную:

ActiveDocument.Variables.Add Name:=strVariableName

Записываю в нее значение, если инициализации не было

If ActiveDocument.Variables.Item(strVariableName).Value = " " Then
    ActiveDocument.Variables.Item(strVariableName).Value = intValue
End If

При выполнении такого кода:

ActiveDocument.Variables.Add Name:=strVariableName
MsgBox IsEmpty(ActiveDocument.Variables.Item(strVariableName).Value)

MsgBox дает значение True, т.е. значение переменной "Пусто"?

3

Re: ActiveDocument.Variables начальное значение при создании

IsEmpty дает False. Это факт. До этого удалил все переменные.

Sub УдалитьВсеПеременные()
    Dim aVar As Variable
    For Each aVar In ActiveDocument.Variables
        aVar.Delete
    Next aVar
End Sub
Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

4

Re: ActiveDocument.Variables начальное значение при создании

Собственно говоря, у меня функция IsEmpty не работала, поэтому пришлось заменить ее на сравнение с пробелом " ". Просто хотел узнать, кто что по этому поводу скажет. При создании переменной Word в нее точно записывается один пробел. Не два "  ", не ноль "", а ровно один " ".

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

5

Re: ActiveDocument.Variables начальное значение при создании

Александр Б. пишет:

Собственно говоря, у меня функция IsEmpty не работала, поэтому пришлось заменить ее на сравнение с пробелом " ". Просто хотел узнать, кто что по этому поводу скажет. При создании переменной Word в нее точно записывается один пробел. Не два "  ", не ноль "", а ровно один " ".

Правильно, поэтому IsEmpty будет всегда False, т.к. пробел является значением.
Функция УдалитьВсеПеременные имеет один серьезный недостаток. Если Вы создаете документ или шаблон с переменными, то при использовании этой функции можно потерять нужные, уже созданные переменные.
Проверить наличие переменной можно функцией:

Public Function VarExist(VarName As String) As Boolean
    On Error Resume Next
    If ActiveDocument.Variables(VarName).Name <> "" Then
        If Err.Number = 0 Then
            VarExist = True
        Else
            VarExist = False
        End If
    End If
End Function

Также при использовании Variables есть различия между ActiveDocument.Variables и ThisDocument.Variables.
ThisDocument.Variables относится к присоединенному шаблону.

6

Re: ActiveDocument.Variables начальное значение при создании

aap77 пишет:

ThisDocument.Variables относится к присоединенному шаблону.

Да, с шаблонами тоже интересно. Особенно с учетом того, что присоединенных шаблонов может быть несколько, если не ошибаюсь.

Мне Variables понадобились, чтобы сохранять в них настройки нумерации названий. Для стандартных подписей "Рисунок", "Таблица" и "Формула" это не нужно, а вот дополнительные подписи постоянно сбоят, если им принудительно не установить нумерацию. В шаблоне Variables мне не нужно сохранять, я их создаю по мере необходимости в самом документе. Они создаются либо автоматически (если их нет, а они нужны), либо принудительно по соответствующему макросу. Поэтому даже если кто-то очистит все Variables, они будут заново созданы, когда понадобится.

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

7

Re: ActiveDocument.Variables начальное значение при создании

Александр Б. пишет:
aap77 пишет:

ThisDocument.Variables относится к присоединенному шаблону.

Да, с шаблонами тоже интересно. Особенно с учетом того, что присоединенных шаблонов может быть несколько, если не ошибаюсь.

Присоединенных шаблонов может много. И к их Variables можно также обращаться. Через VBProjects.
Вообще Variables можно использовать для хранения информации, аналогично файлам доступа VBA. Это очень удобно, избавляет от написания лишнего кода, а также не создает лишних .txt файлов, которые связаны с получением данных.
Я стараюсь создавать имена каждой переменной Variable с префиксом и суффиксом через (_). Это позваляет сортировать переменные по группам, подгруппам и т.п.

8

Re: ActiveDocument.Variables начальное значение при создании

Интересное замечание:
При создании новой Variable, по умолчанию значение Value = " " (1 пробел). Если после этого задать значение Value = "" (без пробелов), то Variable автоматически удалится!!!