Переменные в ворде как сделать

Обновлено: 06.07.2024

Как правильно вставить переменную в документ word? чтоб потом к ней можно было обращаться из программ VBA и макросов Excel в том числе.

как организовать такое обращение?

по CTRL+F9 не удается,
и вставить поле, тоже не работает даже на примерах из хелпа я из дельфей с закладками работал (Bookmarks) может сюда копнуть?

скорее всего что это одно и то же, те же яйца вид сбоку.

как с ними работать?
т.е.
wDoc = GetObject("mywrod.doc")

1. дальше хочу получить список всех переменных (закладок, docavriable или чего то еще)
2. присвоить им свои значения
3. отобразить все это добро

п.с. с дельфями работал года 3 назад, а под офис вообще ничего не писал. вот осваиваю смежные специальности

насчёт списка не уверен, но есть что-то вроде коллекции Variables("имя")

речь про DOCVARIABLES("имя") .

1. как их поместить в документ в нужное место?
2. как этим переменным задать значение при обращении из excel'я?

упс.. просмотрел реализацию (чужая) это они там так закладки назвали.
можно просто добавить закладку через Вставка/Закладка обращение к ней
ActiveDocument.Bookmarks("имязакладки").Range.Text = "qweqweqwe"

Не смешивайте!
Закладки, Поля и Переменные документа - это три совершенно разные вещи!

Опишите подробнее, что нужно.
Текст должен быть виден в документе? Изменять его сожержимое из макроса надо?

есть шаблон документа, в который хочется подставлять данные из Excel строго в определенные участки документа.

Например: ФИО первой строкой, общая сумма последней, и т.д.

Я делал так (пользовался формами).
1. MSWord -> RClick на панелях инструментов Ворда -> "Формы" (чтобы отобразить панель инструментов "Формы")
2. На панели инструментов "Формы" - LClick "Текстовое поле" -> В документе появится текстовое поле (серенькое, если затенение полей формы включено)
3. RClick на появившемся поле в документе -> Свойства
4. В окне "Параменты текстового поля" -> "Параменты поля/Закладка:" вводим, например, "MyTextField1" -> ОК
5. В текстовом поле документа (сереньком) вводим какой-нибудь текст, например, "QWERTY"
6. В ВБА (Alt+F11) -> пишем:

7. F5 на макросе и видим на экране "QWERTY" ! Или "ЙЦУКЕН", как у меня, что в общем-то тоже радует глаз!

Пойдёт? Извиняюсь, что так подробно, вдруг всё-таки кто-ньть читать будет

Представляет переменную, храняную в документе. Переменные документов используются для сохранения параметров макроса между сеансами макроса. Объект Variable входит в коллекцию Переменные. Коллекция Переменные включает все переменные документа в документе или шаблоне.

Примечания

Чтобы вернуть один объект Variable, используйте Переменные (Index), где Index — это имя переменной документа или номер индекса. В следующем примере отображается значение переменной документа Temp в активном документе.

Номер индекса представляет положение переменной документа в коллекции Переменные. Последняя переменная, добавленная в коллекцию Переменные, — индекс No 1; вторая переменная, добавленная в коллекцию, — индекс Номер 2 и так далее. В следующем примере отображается имя первой переменной документа в активном документе.

Чтобы добавить переменную в документ, используйте метод Add из коллекции Переменные. В следующем примере к активному документу добавляется переменная документа с именем "Темп" со значением 12.

Если попытаться добавить переменную документа с именем, которое уже существует в коллекции Переменные, возникает ошибка. Чтобы избежать этой ошибки, перед добавлением новых переменных можно ввести коллекцию. Если переменная "Синий документ" уже существует в активном документе, в следующем примере ее значение составляет 6. Если эта переменная еще не существует, этот пример добавляет ее в документ и задает ее до 6.

Переменные документа невидимы для пользователя, если поле DOCVARIABLE не вставляется с соответствующим именем переменной. В следующем примере в активный документ добавляется переменная документа с именем "Темп", а затем вставляется поле DOCVARIABLE для отображения значения в переменной.

Чтобы добавить переменную документа в шаблон, откройте шаблон в качестве документа с помощью метода OpenAsDocument. В следующем примере хранится имя пользователя (в диалоговом окне Параметры) в шаблоне, присоединенного к активному документу.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Публикация - своего р ода памятка, содержащая примеры кода для:

1. заполнение шаблона Word данными из 1С;
2. заполнение колонтитулов Word данными из 1С;
3. заполнение таблицы в Word данными из 1С;

Начало работы

В большинстве случаев перед нами ставится следующая задача:
Нужно открыть документ Word, заполненный данными из 1С.

Для этого нам нужно подготовить шаблон документа Word. Не путайте это с Word Template, специальные файлы Word, которые содержат настройки документов для многократного использования. Нам нужен обычный вордовский документ с расширениеми *.docx или *.doc. А далее поместить этот документ в макет с двоичными данными.

Читатель может справедливо заметить, что используется модальный вызов, и погрозить автору пальцем. И будет прав.

Далее я обычно создаю структуру полей, которые будут заполняться в шаблоне. Такой подход позволяет унифицировать процедуру заполнения шаблона, а также упростить последующее его изменение.

Углубимся немножко в принципы работы Word.

Каждый документ Word разделен на разделы, которые состоят из страниц.

Для каждого раздела есть возможность создавать свою нумерацию элементов, уникальные колонтитулы и настройки параметров страницы. Так, например, чтобы повернуть одну из страниц (вывести на печать как альбомную), нужно создать под неё отдельный раздел.


Каждая страница Word разделена на несколько областей:

  • Верхний колонтитул
  • Основной текст
  • Нижний колонтитул

Нужно заметить, что в каждом разделе может быть уникальный колонтитул для первой страницы.

Заполнение пользовательских параметров

При обращении к этим коллекциям мы можем выполнять в них поиск и получать встроенные объекты, например, таблицы.

Теперь мы более-менее поняли, как обращаться к областям Word, можем в них пошуровать и выполнить замену наших параметров:

Рассмотри подробнее метод Execute. Его параметры идентичны диалоговуму окну при замене/поиске непоседресвенно из MS Word:

А вот и основные параметры (вольный перевод справки MSDN):

  1. Искомый текст - Строка - Текст для замены. Текст может содержать специальные параметры. Например, ^p - абзац, ^t - табуляция
  2. Чувствительность к регистру - Булево - Если истина, то поиск будет осуществляться с учетом регистра
  3. Слова целиком - Булево - Если истина, то ищутся слова целиком. Вхождение слов не учитываются. Например, при поиске слова дом будет пропущено слово домашний
  4. Использовать подстановочные знаки - Булево - Если истина, то используются встроенные регулярные выражения.
  5. Искать похожие - Булево - Если истина, то результат поиска будет содержать похожие слова
  6. Искать все формы - Булево - Если истина, то результат поиска будет содержать различные формы слов.
  7. Поиск сначала - Булево - Если истина, то будет осуществляться с начала до конца документа
  8. Охват - WdFindWrap - Опредяляет направление поиска
  9. Формат - Format - Формат искомого текста
  10. Строка замены - Строка - Строка, на которую будет заменен исходный текст
  11. Количество замен - WdReplace - Определяет сколько раз выполнять замену
  12. и т.д.

WdReplace - Constant Value:
wdReplaceAll 2
wdReplaceNone 0
wdReplaceOne 1

Данный метод не позволяет получить "Строка замены" как выделенную область, но он работает где-то в 10 раз медленнее. Для получения выделенной области можно воспользоваться немножко откорректированной типовой функцией:

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

Также есть второй подход, использующий такой объект Word, как поля. Мне он не очень нравится, т.к. в больших документах, порядка 100 страниц, эти поля начинают глючить (исчезать, не подставлять нужные значения) и прочая ерунда. Ну по крайней мере в Word 2007. Но я его все равно приведу:

При подготовке шаблона в тело документа необходимо навставлять полей с типом DOCVARIABLE (можно вставлять горячими клавишими Ctrl+F9).

Доступ к таким полям можно получить следующим нехитрым образом:

Заполнение таблиц по шаблону

Итак, мы заполнили параметры в основном тексте документа, заменили параметры в колонтитулах, но у нас еще есть одна неприятность - нужно заполнить таблицу.

Подход, описанный ниже, годится только для таблиц с заранее известным форматом. Т.е. мы можем как угодно отформатировать таблицу и её строки изначально. Но потом изменять довольно-таки проблематично.

К таблицам можно получить доступ через области документа.

Далее, получив таблицу, мы работаем с ней по привычной схеме - строки, столбцы.

Для задания форматирования легче в шаблоне создать таблицу с пустой первой строкой, которую мы в последующем удалим.

Вот, в принципе, и все. Основные вопросы, возникающие при работе с Word, я постарался осветить. Надеюсь, данный обзор поможет вам в работе =)

Спасибо за советы и комментарии:
v3rter, monkbest

Критика только приветствуется. Чем больше замечаний, тем лучше будет гайд =)

Как правило при формировании документов в MS Word мы часто вводим дублирующуюся несколько раз информацию такую как: номер документа, дата, суммы, реквизиты и прочее. Если документ большой, то приходится пролистывать, копировать информацию из страниц выше, снова пролистывать и так далее. На это уходит много времени, а что делать если эта информацию поменялась в процессе подготовки отчета, приходится снова отыскивать введенную информацию и менять ее по всему тексту.

Нужен инструмент, который позволит создавать текстовые поля для многоразового использования, держать их под рукой и централизованно менять их по всему тексту. Такой инструмент мы сделали в надстройке к MS Word - Doc.maker.

Решение проблемы

Программа позволяет создавать именованные переменные (поля) с необходимым текстовым содержанием и многократно вставлять эти поля в нужные места документа Word. Все переменные будут у Вас под рукой и отображаться в боковом меню программы:

Перечень полей в документе Word

Как добавить переменную (поле) в документ MS Word

  1. Установить курсор в которое хотите вставить переменную (поле).
  2. Перейдите ко вкладке меню Doc.maker (она будет доступна после установки программы).
  3. Выберите команду Вставить текст.
  4. Откроется панель создания переменной. В поле Название необходимо указать наименование вставляемого текста, например "НомерОтчета" или "Дата_договора" (наименование может указываться сокращенно, но должно быть понятно для самого пользователя, при этом не должно быть пробелов. Вместо пробела можно использовать знак нижнего подчеркивания "_").
  5. В поле Значение укажите текст, который будет вставляться в Word (например, укажите номер отчета "12345" или укажите дату в нужном формате, например 08.04.2021 г.).
  6. Далее, в зависимости от желания пользователя можно нажать кнопку Сохранить и вставить (сохраняется переменная и вставляется содержимое переменной) или Сохранить и закрыть (сохраняется переменная и ее содержание, но не вставляется в документ, предполагается, что вставка текста будет осуществлена позднее).
  7. При нажатии кнопки Сохранить и вставить в указанное курсором место документа Word будет вставлено значение переменной "НомерОтчета". При этом форма «Переменная» очищается и не закрывается, следовательно операцию по вставке следующего текста можно повторять сколько угодно раз.

Как посмотреть список добавленных полей и использовать переменную повторно

Вы можете отобразить список вставленных переменных открыв панель Менеджер данных для этого:

  1. Откройте вкладку Doc.maker на ленте меню и выберите команду Менеджер данных.
  2. В результате данной операции откроется панель Переменные в отчете в которой отобразятся все поля, которые были вставлены в документ.
  3. Вы можете вставить любую переменную из списка в текущую позицию курсора путем нажатия на кнопку Вставить в документ или дважды кликнув по нужной переменной в списке.

Читайте также: