1

Тема: Как програмно вставить/удалить титул в документ

Я не очень хорошо понимаю. Помогите разобраться.

Такого свойства у Document в хелпе VBA Word 2007 я не нашел.

Я так понимаю, что можно вставить субдокумент в текущий. И этот субдокумент должен быть шаблоном титульного листа. Получится титул.

Но в Ворде есть коллекция титулов, в которую можно добавлять свои. До элемента этой коллекции можно достучаться?

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

И вообще, включает ли шаблон активного документа коллекцию титулов?

Ткните пожалуйста в меня какой нибудь информацией по этой теме.

2

Re: Как програмно вставить/удалить титул в документ

Как вставить титул из коллекции нашел:

Sub InsertTitul()
' InsertTitul
    ActiveDocument.AttachedTemplate.BuildingBlockEntries("Боковая линия"). _
        Insert Where:=Selection.Range, RichText:=True
End Sub

А вот где он находится - в normal.dot или шаблоне текущего документа (у него свой шаблон)?

3

Re: Как програмно вставить/удалить титул в документ

Записал этот макрос:

Sub InsertTitul()
' вставка титула
    ActiveDocument.AttachedTemplate.BuildingBlockEntries("Боковая линия"). _
        Insert Where:=Selection.Range, RichText:=True
End Sub

Заодно и вставил титул.
В диалоге записи макроса выбрал сделать доступным только для этого документа.

Потом удалил титул через меню Ворда.

Запускаю записанный макрос и получаю:

Run-time error '5941'
Запрашиваемый номер семейства не существует.

В чем ошибка?

Отредактировано rizalut (11.01.2010 15:30:49)

4

Re: Как програмно вставить/удалить титул в документ

rizalut пишет:

Как вставить титул из коллекции нашел:

Sub InsertTitul()
' InsertTitul
    ActiveDocument.AttachedTemplate.BuildingBlockEntries("Боковая линия"). _
        Insert Where:=Selection.Range, RichText:=True
End Sub

А вот где он находится - в normal.dot или шаблоне текущего документа (у него свой шаблон)?

Я не совсем понял, вы открыли две темы одинаковых... Зачем?
В первой теме я ответил, что данные блоки находятся в файле building blocks.dotx (C:\Documents and Settings\ИМЯ_ПОЛЬЗОВАТЕЛЯ\Application Data\Microsoft\Document Building Blocks\1049).
И вот здесь: C:\Program Files\Microsoft Office12\Office12\Document Parts\1049

5

Re: Как програмно вставить/удалить титул в документ

rizalut пишет:

Run-time error '5941'
Запрашиваемый номер семейства не существует.

В чем ошибка?

Дело в том, что там все хитрее - нужно указать конкретное место хранения шаблона с блоками.
Например, так:

Sub InsertTitul()
'Вставка титульной страницы из коллекции титульных страниц
Dim oTmp As Template
Dim sPath As String
'Устанавливаем путь к шаблону, содержащему коллекции стандартных блоков
  sPath = Options.DefaultFilePath(wdUserOptionsPath) & "\Building Blocks.dotx"
  Set oTmp = Templates(sPath)
'вставляем нужный блок в выделение или в место нахождения курсора
  oTmp.BuildingBlockEntries("Боковая линия").Insert Where:=Selection.Range, RichText:=True
End Sub

6

Re: Как програмно вставить/удалить титул в документ

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

7

Re: Как програмно вставить/удалить титул в документ

Прошу, прощения за 2 темы. Грешу на такой случай: При нажатии кнопки "Отправить" страница не перезагружалась больше 2 минут, просто висела. Я нажал "Предпросмотр" и уже из него "Отправить".  Но специально дубликат темы не вбивал. Я удалю нижнюю тему, а ваш комментарий добавлю тут.

8

Re: Как програмно вставить/удалить титул в документ

admin пишет:

Коллекциями в Word 2007 называются готовые образцы различных объектов или варианты их редактирования.
Хранятся коллекции в файле-шаблоне Building Blocks.dotx (стандартные коллекции).
Получить доступ к стандартным коллекциям можно примерно так (автозапись макроса):

ActiveDocument.AttachedTemplate.BuildingBlockEntries("Кадр").Insert Where _
    :=Selection.Range, RichText:=True

Почитать о коллекциях можно здесь: внешняя ссылка.
Это как бы подключаемые шаблоны-блоки.

9

Re: Как програмно вставить/удалить титул в документ

admin, громадное спасибо!

Действительно, всё не так уж очевидно.

Значит алгоритм добавления блока в Произвольный.dotx таков:
1. устанавливаем к нему путь.
2. создаем в нем коллекцию.
3. сохраняем выделенное, как блок (тип, имя) в этой коллекции.

Остался один вопрос:
Если выделить титульную страницу, в Ворде можно заменить ее на другую. Или удалить. Значит он получает о ней информацию из документа.
Но когда я програмно вставляю титульную страницу, я не создаю нового именованного раздела.
Я просто добавляю несколько разрозненных объектов.
Ведь у документа нет свойства Document.BuildingBlockCollection или чего то подобного.
Как можно выяснить, какие блоки есть в документе, удалять или заменять их.
Короче - как работать с блоками, добавленными в документ?

Отредактировано rizalut (12.01.2010 17:38:44)

10

Re: Как програмно вставить/удалить титул в документ

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