1

Тема: Сохранить несколько окон в один файл не сохраняя окон

Ситуация такая, программа формирует документы. Например, уведомления о какой-либо регистрации. Каждое уведомление WinWord открывает в отдельное окно (бывает их по 500).
Вопрос: Как можно сохранить все эти окна в один файл, например, через разрыв страницы, не сохраняя каждое окно по отдельности

Заранее благодарен всем за ответ!

Отредактировано rerontium (09.08.2010 21:24:59)

2

Re: Сохранить несколько окон в один файл не сохраняя окон

Под окном подразумевается документ? Программа создаёт все документы сразу и нужно их сразу сохранить в один файл или по отдельности и нужно новый документ добавлять к файлу с ранее созданными?

Лучше день потерять — потом за пять минут долететь!

3

Re: Сохранить несколько окон в один файл не сохраняя окон

viter.alex пишет:

Под окном подразумевается документ? Программа создаёт все документы сразу и нужно их сразу сохранить в один файл или по отдельности и нужно новый документ добавлять к файлу с ранее созданными?

Совершенно верно, окно = документ. Программа создает документы по отдельности и нужно их сразу сохранить  в один файл

4

Re: Сохранить несколько окон в один файл не сохраняя окон

Можно без сохранения, но тогда придётся использовать буфер обмена. А можно сохранить во временную папку, вставить в результирующий файл, а затем удалить. Как-то вот так.

Sub SaveAllToFile()
  Dim oDoc As Document
  Dim FSO As Object
  Dim sFileName As String
  Dim oRng As Range

  Set FSO = CreateObject("Scripting.FileSystemObject")
  Set oDoc = Documents.Add 'Создаём новый документ
  Set oRng = oDoc.Range
  
  Do While Documents.Count > 1
    sFileName = FSO.GetTempName() 'Имя для временного файла
    'Сохраняем документ во временную папку
    Documents(2).SaveAs Environ("Temp") & "\" & Replace(sFileName, "tmp", "doc"), AddToRecentFiles:=False
    With oRng
      .Collapse wdCollapseEnd
      'Вставляем содержимое сохранённого файла
      .InsertFile Documents(2).FullName, , , False
      .SetRange oDoc.Range.End, oDoc.Range.End
      'Вставляем разрыв страницы
      .InsertBreak WdBreakType.wdPageBreak
    End With
    'Закрываем временный файл и удаляем его.
    sFileName = Documents(2).FullName
    Documents(2).Close False
    Kill sFileName
    DoEvents
  Loop
  
End Sub

Макрос поместить в Normal. Никаких других документов не должно быть открыто.

Лучше день потерять — потом за пять минут долететь!

5

Re: Сохранить несколько окон в один файл не сохраняя окон

Отлично!!
Славься-славься Viter.Alex The Lord of WordWorld!! (Поёт по английски)

Все работает, но есть маленький нюанс. Документ (в который макрос складывает все документы) создается с параметрами страницы по умолчанию. А программа формирует документы с какими-то своими параметрами. И получается, что некие строки (например "Подпись" или "Место Печати", "Исполнитель") вылазит на другую страницу.

Можно ли подкорректировать макрос с тем условием, чтобы параметры страницы нового документа-контейнера совпадали (или были схожими) с параметрами страницы исходных документов??

Еще раз за-ранее благодарен за ответ!

И еще один (наверное глупый) Тяжело ли создать иконку для этой операции на панели быстрого доступа (word 2003). В принципе горячие клавиши назначил, но просто интересно

6

Re: Сохранить несколько окон в один файл не сохраняя окон

Перед циклом Do…While вставьте следующий код:

  With oDoc.PageSetup
    .LineNumbering.Active = Documents(2).PageSetup.LineNumbering.Active
    .Orientation = Documents(2).PageSetup.Orientation
    .TopMargin = Documents(2).PageSetup.TopMargin
    .BottomMargin = Documents(2).PageSetup.BottomMargin
    .LeftMargin = Documents(2).PageSetup.LeftMargin
    .RightMargin = Documents(2).PageSetup.RightMargin
    .Gutter = Documents(2).PageSetup.Gutter
    .HeaderDistance = Documents(2).PageSetup.HeaderDistance
    .FooterDistance = Documents(2).PageSetup.FooterDistance
    .PageWidth = Documents(2).PageSetup.PageWidth
    .PageHeight = Documents(2).PageSetup.PageHeight
    .FirstPageTray = Documents(2).PageSetup.FirstPageTray
    .OtherPagesTray = Documents(2).PageSetup.OtherPagesTray
    .SectionStart = Documents(2).PageSetup.SectionStart
    .OddAndEvenPagesHeaderFooter = Documents(2).PageSetup.OddAndEvenPagesHeaderFooter
    .DifferentFirstPageHeaderFooter = Documents(2).PageSetup.DifferentFirstPageHeaderFooter
    .VerticalAlignment = Documents(2).PageSetup.VerticalAlignment
    .SuppressEndnotes = Documents(2).PageSetup.SuppressEndnotes
    .MirrorMargins = Documents(2).PageSetup.MirrorMargins
    .TwoPagesOnOne = Documents(2).PageSetup.TwoPagesOnOne
    .BookFoldPrinting = Documents(2).PageSetup.BookFoldPrinting
    .BookFoldRevPrinting = Documents(2).PageSetup.BookFoldRevPrinting
    .BookFoldPrintingSheets = Documents(2).PageSetup.BookFoldPrintingSheets
    .GutterPos = Documents(2).PageSetup.GutterPos
  End With
Лучше день потерять — потом за пять минут долететь!