Vba работа с шаблоном word

Всем привет. Написал отдельный модуль (класс), вроде работает. Прикладываю в спойлер.

Ну и пример использования. Если кто найдет ошибку, с радостью приму комментарии

Код
Set act = New WordGenerator
With act
 .template_add "courtиск.docx" 'Добавили шаблон в папке templates проекта
 .template_add "С:претензия.docx" 'добавили шаблон абсолютного пути
 .dialog = True 'И этого нам мало, мы спрашиваем юзера, чтобы тоже указал шаблоны
 .multiselect = True 'да и пусть еще мог бы выбрать сразу несколько в диалоговом окне
 .closeafter = True 'Юзер не хочет редактировать готовый файл, закрываем его
 .marker = "Иванов 2017" 'а это припишется к каждому создаваемому файлу
 .SetSaveFolder = "Все по Иванову"  'а это папка, куда будет складываться все с этого объекта

 .pair_add "ФИО", "Иванов Иван Иванович"  'парочка пар на замену, можно и сотню
 .pair_add "[должность]", "директор"

 .Start 'запускаем процесс, смотрим как открываются ворд файлики, 
         'производятся замены. сохраняется и закрывается, результат ищем в папках
End With

Скрытый текст

Stranger31

0 / 0 / 0

Регистрация: 04.06.2012

Сообщений: 35

1

24.05.2013, 16:14. Показов 10264. Ответов 10

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Необходимо заполнить шаблон word’a через форму vba. При выборе одного из нескольких ListIndex в combobox’e должно выбранное поместиться в шаблон.
Вот часть кода, с которой не могу разобраться:

Visual Basic
1
2
3
Dim oDoc As Document
Set oDoc = Application.Documents.Add("F:Test.dot")
    oDoc.Bookmarks("tpredmet").Range.Text = ComboBox1.Value

При запуске пишет то, что запрашиваемый номер семейства не существует. В чём собственно моя проблема?



0



5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

24.05.2013, 17:33

2

Stranger31, очень часто при возникновении ошибки выделяется жёлтым строка кода, в которой ошибка. Какая строка кода у вас выделяется жёлтым?



0



0 / 0 / 0

Регистрация: 04.06.2012

Сообщений: 35

24.05.2013, 17:35

 [ТС]

3

Скрипт, oDoc.Bookmarks(«tpredmet»).Range.Text = ComboBox1.Value



0



5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

24.05.2013, 17:36

4

Stranger31, в документе нет закладки «tpredmet».

Примечание

Под семейством понимается «коллекция». Откуда пошло слово «семейство» в VBA — не известно, т.к. такого понятия в VBA нет.



0



0 / 0 / 0

Регистрация: 04.06.2012

Сообщений: 35

24.05.2013, 17:38

 [ТС]

5

[b]Скрипт[b], да если бы её не было, но закладка создана



0



5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

24.05.2013, 17:40

6

Stranger31, а как вы смотрите: есть закладка в документе или нет (какие кнопки в программе «Word» нажимаете, чтобы увидеть: есть закладка или нет)?



0



0 / 0 / 0

Регистрация: 04.06.2012

Сообщений: 35

24.05.2013, 17:43

 [ТС]

7

Скрипт, вставка — ссылки — закладка



0



Скрипт

5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

24.05.2013, 17:48

8

Stranger31, вот таким кодом проверьте, есть ли нужная закладка:

Visual Basic
1
2
3
4
5
6
Sub Procedure_1()
    
    'Вывод результата в View - Immediate Window.
    Debug.Print ActiveDocument.Bookmarks.Exists("tpredmet")
 
End Sub



0



0 / 0 / 0

Регистрация: 04.06.2012

Сообщений: 35

24.05.2013, 17:51

 [ТС]

9

Скрипт, есть. и мне интересно, ответ будет по самому вопросу?



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

24.05.2013, 17:55

10

Также Ctrl-Shift-F5 (окно Закладка).



0



Alex77755

11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

24.05.2013, 23:11

11

Когда-то я делал так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub ВСТАВКА_ПО_МЕТКЕ(МЕТКА, ТЕКСТ)
Dim R2
On Error GoTo 13
DocWord.Bookmarks(МЕТКА).Select
If (DocWord.Bookmarks(МЕТКА).End - DocWord.Bookmarks(МЕТКА).Start) > 1 Then
Set R2 = DocWord.Range(DocWord.Bookmarks(МЕТКА).Start + 1, DocWord.Bookmarks(МЕТКА).End)
R2.Delete
End If
Selection.InsertBefore (" " & ТЕКСТ)
Exit Sub
13
MsgBox "METKA  " & МЕТКА & "  NE NAYDENA!!!!!", vbCritical, "VNIMANIE!!!"
End Sub

Вызов

Visual Basic
1
 ВСТАВКА_ПО_МЕТКЕ "VAGNO", ВАЖНО.Text



0



Категория: Excel
Опубликовано: 18 июня 2020
Просмотров: 12527

Исходный код из видео

Sub main()
Dim wdApp As Object
Dim wdDoc As Object

HomeDir$ = ThisWorkbook.Path
Set wdApp = CreateObject("Word.Application")
i% = 2
Do
If Cells(i%, 1).Value = "" Then Exit Do
If Cells(i%, 1).Value <> "" Then

NPP$ = Cells(i%, 1).Text
ID$ = Cells(i%, 2).Text
Adress$ = Cells(i%, 3).Text
SN$ = Cells(i%, 4).Text

DataC$ = Date

FileCopy HomeDir$ + "template.doc", HomeDir$ + "" + NPP$ + "_" + ID$ + "_" + DataC$ + ".doc"
Set wdDoc = wdApp.Documents.Open(HomeDir$ + "" + NPP$ + "_" + ID$ + "_" + DataC$ + ".doc")

wdDoc.Range.Find.Execute FindText:="&date", ReplaceWith:=DataC$

wdDoc.Range.Find.Execute FindText:="&id", ReplaceWith:=ID$
wdDoc.Range.Find.Execute FindText:="&adress", ReplaceWith:=Adress$
wdDoc.Range.Find.Execute FindText:="&sn", ReplaceWith:=SN$

wdDoc.Save
wdDoc.Close
End If

i% = i% + 1
Loop
wdApp.Quit
MsgBox "Готово!"

End Sub

Исходный код из видео — скачать архив с файлами


ZIP архив с файлами


Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в YouTube, там Вы найдете много интересного видео, которое выходит достаточно часто. Приятного просмотра!

 С уважением, авторы сайта Компьютерапия

Понравилось? Поделись этим видео с друзьями!

Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

10.6. Свойства объекта Document

10.6.1. Application — приложение документа

Это свойство позволяет получить объект приложения документа. Вы можете подумать, что это — ошибка, что, наоборот, объект документа содержится в объекте приложения. Однако, ошибки нет. Это свойство позволяет обращаться к приложению тогда, когда у нас нет ссылки на него, а есть лишь ссылка на документ. Например, код в листинге 10.15 позволяет скрыть окно Microsoft Word вместе с окном документа, используя свойство Visible объекта Application.

ThisDocument.Application.Visible = False


Листинг
10.15.
Скрытие окна приложения

10.6.2. AttachedTemplate — присоединенный шаблон

Свойство AttachedTemplate позволяет узнать, какой шаблон присоединен к документу, а так же — изменить этот шаблон на другой. Это очень полезное свойство — ведь шаблоны могут содержать множество нужных макросов, стилей и т.д., а с помощью AttachedTemplate можно удобно управлять ими.

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

Dim obj_Templ As Template
    Set obj_Templ = ActiveDocument.AttachedTemplate
    MsgBox ("Имя шаблона: " & obj_Templ.Name & _
    ", путь к шаблону: " & obj_Templ.Path)


Листинг
10.16.
Имя присоединенного шаблона и путь к нему

Здесь мы сначала объявили новую переменную типа Template, потом присвоили ей ссылку на шаблон, присоединенный к активному документу, а потом воспользовались свойствами Name и Path шаблона, чтобы вывести информацию о нем.

Листинг 10.17 позволяет присоединить к документу шаблон MyTemplate.dotm, расположенный на диске C.

ActiveDocument.AttachedTemplate = "C:MyTemplate.dotm"


Листинг
10.17.
Присоединяем шаблон к документу

10.6.3. Bookmarks — закладки

Возвращает коллекцию Bookmarks, которая содержит все закладки в документе. Закладки позволяют удобно организовать навигацию по документу, особенно удобно с их помощью автоматизировать создание новых документов на основе шаблонов. Подробнее о закладках мы поговорим ниже.

10.6.4. Characters, Words, Sentences, Paragraphs и другие

10-04-Символы.docm — пример к п. 10.6.4.

Все эти свойства возвращают объекты, предназначенные для работы с различными частями документа.

  • Characters (Символы) — возвращает одноименную коллекцию, каждый объект которой представляет собой отдельный символ в документе. Каждый объект коллекции Characters представляет собой диапазон ( Range ), содержащий один символ
  • Words (Слова) — то же самое, но уже для слов.
  • Sentences (Предложения) — то же самое для предложений.
  • Paragraphs (Абзацы) — коллекция абзацев документа.
  • Помимо этих коллекций документ может содержать и другие подобные. В частности, следующие:
  • Hyperlinks — гиперссылки. При добавлении гиперссылки обратите внимание на то, что метод Add использует объект привязки гиперссылки — Anchor (Якорь) — им может быть, например, графический или текстовый элемент.
  • Indexes — индексы.
  • InlineShapes, Shapes — фигуры, графические элементы
  • Lists — списки.
  • OMaths — формулы.
  • Sections — разделы.
  • Tables — таблицы.

Работа со всеми этими коллекциями схожа. Давайте рассмотрим ее на примере коллекции Characters, которую, как уже было сказано, можно использовать для работы с отдельными символами документа. Работу с некоторыми другими коллекциями мы рассмотрим ниже.

Листинг 10.18 позволяет вывести в окне сообщения информацию о количестве символов в документе (включая пробелы).

MsgBox ("Количество символов: " & _
    ActiveDocument.Characters.Count)


Листинг
10.18.
Выводим количество символов в документе

С помощью метода Item коллекции, мы можем получить доступ к каждому символу документа. Например, с помощью этого метода можно проводить различные статистические подсчеты. листинг 10.19. позволяет узнать, сколько раз в документе использована буква «ф» в верхнем и нижнем регистре.

Dim var_Fcount
    var_Fcount = 0
    For i = 1 To ActiveDocument.Characters.Count
        If ActiveDocument.Characters.Item(i) = "ф" Or _
        ActiveDocument.Characters.Item(i) = "Ф" Then _
        var_Fcount = var_Fcount + 1
    Next i
    MsgBox ("Количество букв 'Ф' в документе: " & _
    var_Fcount)


Листинг
10.19.
Подсчитываем количество вхождений буквы «ф»

Листинг 10.20 позволяет заменить букву «ё» в верхнем и нижнем регистре на «е».

Dim obj_D As Document
    Set obj_D = ActiveDocument
    For i = 1 To obj_D.Characters.Count
        If obj_D.Characters.Item(i) = "ё" _
        Then obj_D.Characters.Item(i) = "е"
        If obj_D.Characters.Item(i) = "Ё" _
        Then obj_D.Characters.Item(i) = "Е"
    Next i


Листинг
10.20.
Замена буквы е на е

В листинге 10.21 вы можете найти программу, которая «переворачивает» весь текст в документе — меняет последний символ с первым, второй — с предпоследним и так далее.

Dim obj_D As Document
    Dim str_Chr As String
    Dim var_Count As Variant
    Set obj_D = Documents.Add
    obj_D.Range.Text = "Привет!"
    var_Count = obj_D.Characters.Count
    For i = 1 To var_Count  2
        str_Chr = obj_D.Characters.Item(i)
        obj_D.Characters.Item(i) = _
        obj_D.Characters.Item(var_Count - i + 1)
        obj_D.Characters.Item(var_Count - i + 1) = _
        str_Chr
    Next i


Листинг
10.21.
Переворачивание текста в документе

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

Далее создаем новый документ и добавляем в него текст «Привет» с помощью свойства Text объекта Range. Именно этот текст мы и будем переворачивать.

Итак, мы используем цикл длительностью, равной количеству символов в документе, деленному на 2, причем обратите внимание на оператор деления. Это — целочисленное деление, то есть для четного числа символов в обмене будут участвовать все символы, а для нечетного — один, «центральный» символ останется на своем месте.

В цикле мы сначала присваиваем i -й символ переменной, потом присваиваем i -му символу противоположный ему символ, а в конце — противоположному символу — символ, хранящийся в переменной. Обратите внимание на алгоритм расчета противоположного символа. Var_Count — i + 1 дает нам последний символ при i = 1, то есть — для первого символа и т.д. В этом несложно убедиться путем расчетов. Например, если в тексте 10 символов, то для обмена с первым символом ( i = 1) мы получим последний символ (10-1+1=10), для второго ( i =2) — девятый (10-2+1=9) и т.д.

10.6.5. Content — «чистый» текст документа

10-05-Content.docm — пример к п. 10.6.5.

Свойство документа Content возвращает объект Range — текст документа без сносок, колонтитулов и т.д.

В листинге 10.22 вы можете найти пример использования свойства Content для настройки шрифта документа.

Dim obj_C As Range
    Set obj_C = ActiveDocument.Content
    With obj_C.Font
        .Name = "Arial"
        .Size = 12
        .Spacing = 1.5
    End With


Листинг
10.22.
Настраиваем шрифт текста документа

В этом коде мы объявили объектную переменную типа Range, связали с ней объект Range, возвращаемый свойством Content активного документа, после чего, воспользовавшись свойством Font объекта Range, установили гарнитуру ( Name ) шрифта Arial, размер ( Size ) — 12 пунктов и расстояние между символами в 1.5 пункта.

Чтобы записать текст документа в строковую переменную, можно воспользоваться кодом листинга 10.23.

Dim str_Text As String
    str_Text = ActiveDocument.Content.Text


Листинг
10.23.
Записываем текст документа в переменную

Cвойство Text объекта Range возвращает текст объекта. Записав текст в переменную, мы сможем работать с ней средствами VBA.

10.6.6. Endnotes, Footnotes — сноски

10-06-Сноски.docm — пример к п. 10.6.6.

Эти свойства возвращают, соответственно, коллекцию Endnotes и Footnotes. В коллекции Endnotes находятся объекты Endnote — то есть концевые ссылки — ссылки, которые расположены в конце документа. В коллекции Footnotes расположены объекты Footnote — обычные ссылки, которые расположены в конце страницы.

Давайте рассмотрим работу с этими объектами на примере Footnotes. Работа с Endnotes аналогична работе с Footnotes.

Добавить в документ новую ссылку можно с помощью метода Add коллекции Footnotes.

Полный вызов метода Add выглядит так:

  • ActiveDocument.Footnotes.Add(Range, Reference, Text)
  • Range — область текста, для которой вставляется сноска.
  • Reference — определяет символ сноски. По умолчанию используется автоматическая нумерация сносок.
  • Text — текст сноски.

В листинге 10.24. вы можете видеть код, добавляющий сноску для выделенного фрагмента текста (как правило, выделяют слово):

ActiveDocument.Footnotes.Add _ 
    Range:=Selection.Range, _
    Text:="Новая сноска!"


Листинг
10.24.
Добавление сноски к выделенному фрагменту документа

Свойство Count коллекции Footnotes позволяет узнать количество ссылок в документе.

Чтобы обращаться к отдельным сноскам (объектам Footnote ), можно пользоваться либо их индексами в коллекции Footnotes, либо — оператором For Each — Next.

Свойство Range каждого объекта Footnote возвращает ссылку на объект Range, представляющий собой диапазон, который сноска занимает в документе. С помощью методов объекта можно настраивать различные параметры сноски.

Свойство Reference возвращает объект типа Range, который представляет собой область, занимаемую значком-ссылкой на сноску в теле документа.

В листинге 10.25 приведен пример форматирования сносок и ссылок на них.

Dim obj_D As Document
    Dim obj_Footnote As Footnote
    Set obj_D = ActiveDocument
    'Форматируем сноски
    For Each obj_Footnote In obj_D.Footnotes
        obj_Footnote.Range.Font.Size = 11
    Next
    'Форматируем знаки-ссылки на сноски
    For i = 1 To obj_D.Footnotes.Count
        obj_D.Footnotes.Item(i).Reference _
        .Font.Color = wdColorRed
    Next i


Листинг
10.25.
10.25. Форматирование сносок и ссылок на них

Сначала мы, с помощью конструкции For-Each перебираем все сноски и устанавливаем размер шрифта для каждой из них равным 11 пунктов.

Далее, с помощью цикла For-Next мы обходим все ссылки на сноски в тексте и делаем цвет их шрифта красным.

Чтобы удалить сноску, можно воспользоваться методом Delete объекта Footnote.

Узнать номер сноски в коллекции Footnotes можно, используя свойство Index. Например, код листинга 10.26 позволяет вывести поочередно все сноски с их номерами в окне сообщения.

Dim obj_D As Document
    Dim obj_Footnote As Footnote
    Set obj_D = ActiveDocument
    'Выводим информацию о сносках
    For Each obj_Footnote In obj_D.Footnotes
      MsgBox ("Номер сноски: " & obj_Footnote.Index & _
      vbCrLf & "Текст сноски: " & obj_Footnote.Range.Text)
    Next


Листинг
10.26.
10.26. Выводим все сноски и их номера

Константа vbCrLf заменяет собой знак перевода строки, в итоге при выполнении этого кода для каждой сноски будет выведено такое окно (рис. 10.2.).

Информация о сносках

Рис.
10.2.
Информация о сносках

Понравилась статья? Поделить с друзьями:
  • Vba проект в excel это
  • Vba программирование в excel видео
  • Vba проверить открыт ли файл word
  • Vba последняя запись в excel
  • Vba поиск слова во всем excel