Переменные в ворде как сделать
Как правильно вставить переменную в документ 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):
- Искомый текст - Строка - Текст для замены. Текст может содержать специальные параметры. Например, ^p - абзац, ^t - табуляция
- Чувствительность к регистру - Булево - Если истина, то поиск будет осуществляться с учетом регистра
- Слова целиком - Булево - Если истина, то ищутся слова целиком. Вхождение слов не учитываются. Например, при поиске слова дом будет пропущено слово домашний
- Использовать подстановочные знаки - Булево - Если истина, то используются встроенные регулярные выражения.
- Искать похожие - Булево - Если истина, то результат поиска будет содержать похожие слова
- Искать все формы - Булево - Если истина, то результат поиска будет содержать различные формы слов.
- Поиск сначала - Булево - Если истина, то будет осуществляться с начала до конца документа
- Охват - WdFindWrap - Опредяляет направление поиска
- Формат - Format - Формат искомого текста
- Строка замены - Строка - Строка, на которую будет заменен исходный текст
- Количество замен - WdReplace - Определяет сколько раз выполнять замену
- и т.д.
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. Все переменные будут у Вас под рукой и отображаться в боковом меню программы:
Как добавить переменную (поле) в документ MS Word
- Установить курсор в которое хотите вставить переменную (поле).
- Перейдите ко вкладке меню Doc.maker (она будет доступна после установки программы).
- Выберите команду Вставить текст.
- Откроется панель создания переменной. В поле Название необходимо указать наименование вставляемого текста, например "НомерОтчета" или "Дата_договора" (наименование может указываться сокращенно, но должно быть понятно для самого пользователя, при этом не должно быть пробелов. Вместо пробела можно использовать знак нижнего подчеркивания "_").
- В поле Значение укажите текст, который будет вставляться в Word (например, укажите номер отчета "12345" или укажите дату в нужном формате, например 08.04.2021 г.).
- Далее, в зависимости от желания пользователя можно нажать кнопку Сохранить и вставить (сохраняется переменная и вставляется содержимое переменной) или Сохранить и закрыть (сохраняется переменная и ее содержание, но не вставляется в документ, предполагается, что вставка текста будет осуществлена позднее).
- При нажатии кнопки Сохранить и вставить в указанное курсором место документа Word будет вставлено значение переменной "НомерОтчета". При этом форма «Переменная» очищается и не закрывается, следовательно операцию по вставке следующего текста можно повторять сколько угодно раз.
Как посмотреть список добавленных полей и использовать переменную повторно
Вы можете отобразить список вставленных переменных открыв панель Менеджер данных для этого:
- Откройте вкладку Doc.maker на ленте меню и выберите команду Менеджер данных.
- В результате данной операции откроется панель Переменные в отчете в которой отобразятся все поля, которые были вставлены в документ.
- Вы можете вставить любую переменную из списка в текущую позицию курсора путем нажатия на кнопку Вставить в документ или дважды кликнув по нужной переменной в списке.
Читайте также: