Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2010, 02:54   #1
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию Сборка документа из разных шаблонов

Есть большое число шаблонов документов. Делается выборка из них
Затем последовательно на основе выбранных шаблонов создаются
документы. В документах делается обработка специальных полей.
Всё это делается со скрытым Word. Причём объект Word.Application
динамически создаётся из Excel. До этого момента всё работает.
Проблема состоит в том что необходимо полученные (сгенерированные)
документы слить в один. Что бы распечатать в последствии на не дуплексном принтере последовательно 1-е и 2-е страницы.
Cохранять документы и затем вставлять по InsertFile не хочется. Такой вариант у меня работает.
Попробовал через Copy/Paste но не получается переключиться для вставки на скрытое окно временного документа в котором должен собираться текст для распечатки.
Код:
On Error Resume Next
Set WordObj = GetObject(, "Word.Application")
If Err.Number <> 0 Then 
     Err.Clear
     Set WordObj = CreateObject("Word.Application")
     If Err.Number <> 0 Then
           Exit Sub
     End If
 End If
Set TDoc = WordObj.Documents.Add(Visible:=True) 'результирующий документ
'........................
For i = 1 to N
      Set WordDoc = WordObj.Documents.Add("T" & CStr(i), False)
      ОбработкаДокументаСозданногоНаОсновеШаблона WordDoc
      With WordObj.Selection
             .WholeStory
             .Copy   'cкопировали документ
       End with
       ' здесь надо перейти к TDOC , начать новую секцию
       '  c помощью InsertBreak Type:=2
       ' и вставить туда скопированный документ по Paste
      WordDoc.close(0) 'wdDoNotSaveChanges
End With
Объединяемые документы имеют свои колонтитулы и сложную
структуру. C кучей рамок, надписей и внедрённых объектов
Что то я в эту жару не соображу как проще это сделать

Последний раз редактировалось Aent; 14.08.2010 в 20:27.
Aent вне форума Ответить с цитированием
Старый 14.08.2010, 13:33   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Так подойдёт?
Код:
Set oRng = TDoc.Range
With oRng
  .Collapse wdCollapseEnd
  .InsertBreak 2
  .SetRange TDoc.Range.End, TDoc.Range.End
  .Paste
End With
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 14.08.2010, 16:41   #3
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Спасибо, viter.alex. К сожалению так не получается. В результирующем документе съезжают надписи и как следствие появляются лишние страницы. Точнее, в нижней надписи для нотариуса на первой странице меняется при копировании размер шрифта с 10 на 12 - поэтому всё и плывёт.
Индивидуальные документы создаются без проблем.
По ссылке архив, содержащий темплейт на основе которого создаются документы, индивидуальные файлы и сборка с использованием вашего кода
http://www.rapidshare.ru/1603367

Последний раз редактировалось Aent; 14.08.2010 в 16:56.
Aent вне форума Ответить с цитированием
Старый 14.08.2010, 19:39   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Шрифты, думаю, будут ехать, если не оформить весь текст стилями. Если нужно только распечатать, то можно попробовать копировать постранично как картинку и вставлять как картинку.
Код для сохранения страницы в картинку (требует установленного Access)
Код:
Sub SaveToBMP() 
  Dim ADODB As Object 
  Set ADODB = CreateObject("ADODB.Stream") 
  With ADODB 
    .Type = 1 ' adTypeBinary 
    .Open 
    .Write (Selection.Bookmarks("\page").Range.EnhMetaFileBits) 
    .SaveToFile ("Страница " & Selection.Information(wdActiveEndPageNumber) & ".bmp") 
    .Close 
  End With 
  Set ADODB = Nothing 
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 14.08.2010, 20:37   #5
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

картинка это не вариант.
Странно. При копировании "руками" ничего ведь не съезжает.
Aent вне форума Ответить с цитированием
Старый 14.08.2010, 21:27   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Честно говоря, я не проверял — нет сейчас возможности. Может быть дело в сохранеии формата при вставке? Нужно сохранить формат оригинала, а по умолчанию оставляет исходный формат?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 13.09.2010, 00:18   #7
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

В итоге проблема решилась пересозданием всех шаблонов сливаемых документов
на базе одного шаблона. Без этого постоянно что то разъезжалось, несмотря на
явно задаваемые параметры форматирования
Aent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описание и обсуждение шаблонов проектирования (паттерны) atomicxp Общие вопросы по программированию, компьютерный форум 35 20.01.2018 21:42
Транспонирование множества данных из разных книгах или из разных листов на 1 лист посредством макроса Тантана Microsoft Office Excel 6 18.12.2014 13:04
Использование шаблонов s180 Microsoft Office Word 5 10.12.2009 16:17
несколько разных строк из разных файлов сформировать в один Иван123456 Microsoft Office Excel 3 30.07.2009 17:05