Всем привет. Написал отдельный модуль (класс), вроде работает. Прикладываю в спойлер.
Ну и пример использования. Если кто найдет ошибку, с радостью приму комментарии
Код |
---|
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 должно выбранное поместиться в шаблон.
При запуске пишет то, что запрашиваемый номер семейства не существует. В чём собственно моя проблема?
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, вот таким кодом проверьте, есть ли нужная закладка:
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 |
|||||||
Когда-то я делал так:
Вызов
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.
Информация о сносках