Печать и сохранение документов
Чтобы напечатать документ, следует вызвать метод
Printout:
Printout Background, append, range, outputfilename, from, to, _
item, copies, pages, PrintToFile, Collate,
_
ActivePrinterMacGX, Manual Duplex Print
Все параметры необязательные и соответствуют свойствам, которые вы можете установить в диалоговом окне Print программы Word. Значение параметра Background определяет, будет ли печать выполняться в фоновом режиме. Обычно этому параметру присваивают значение True (при автоматизации приложений).
Совет
При вызове методов с большим количеством параметров (большинство из которых, как правило, опускаются), следует использовать именованные параметры, чтобы определить только некоторые из них. Например, чтобы организовать печать первых трех страниц активного документа, следует воспользоваться следующим выражением.
AppWord.ActiveDocument.Printout from:=1, to:=3
При использовании VBA для указания Word напечатать документ процесс постановки документа в очередь на печать выполняется не мгновенно. Если попытаться закрыть Word сразу после вызова метода Printout, то он сообщит, что завершение работы в данный момент приведет к отмене процедуры печати. Чтобы удостовериться в том, что документ был записан в буфер (это означает, что можно правильно завершить работу Word), необходимо организовать цикл, в котором будет выполняться проверка значения свойства BackgroundPnntingStatus. До тех пор, пока это значение не равно 0, приложение выполняет запись информации в буфер. После того как будет переписана вся информация, можно выйти из Word. Этот прием будет использован в параграфе " VB6 в действии проект WordVBA" далее в этой главе.
Чтобы сохранить докумет, следует воспользоваться методом SaveAs объекта Document с помощью выражения.
SaveAs FileName, File Format, LockComments, Password, _
AddToRecentFiles, WritePassword, ReadOnlyRecomitiended, _
EmbedTrueTypeFonts, SaveNativePictureFormat, _
SaveFormsData, SaveAsOCELetter
Как и в случае с методом Print, параметры метода SaveAs соответствуют установкам диалогового окна Save As приложения. Если файл был предварительно сохранен, следует использовать метод Save, для обращения к которому вообще не требуется задавать параметры. Он позволяет выполнить сохранение документа в файле, используя опции, определенные в методе SaveAs (при самом первом сохранении документа) Чтобы сохранить активный документ в файле с другим именем, следует воспользоваться следующим выражением:
AppWord.ActiveDocument.SaveAs "с:\Documents\Report99.doc"
К свойствам объекта Document также относится свойство Saved,
которое возвращает значение True
или False,
указывающее, был ли документ изменен с момента последнего сохранения. Это свойство можно использовать в программе, чтобы определить, следует ли обращаться к методу Save (Сохранить) перед завершением работы приложения.
Ниже приведен фрагмент программы, позволяющей открыть существующий документ, распечатать его, а затем закрыть приложение. Следует отметить то обстоятельство, что с целью упрощения программы для создания нового экземпляра Word используется функция Create0bject(). Способ установления связи с существующим экземпляром Word рассматривался ранее.
Программа 14.9. Открытие и печать DOC-файла
Dim WordApp As Word.Application
Dim thisDoc As Document
Dim prnTime As Date
Dim breakLoop As Boolean
Set WordApp = CreateOb]act ("Word Application")
WordApp.Visible - False
WordApp.Documents.Open ("c:\sarriple.doc")
thisDoc.Printout True, True
prnTime = Time
breakLoop = False
While WordApp.BackgroundPrintingStatus <> 0 And Not breakLoop
If Minute(Time - prnTime) > 1 Then
Reply = MsgBox("Word is taking too long to print." _
& vbCrLf & "Do you want to quit7", vbYesNo)
'(Word слишком долго выполняет
'печать ... Остановить печать?)
If Reply = vbYes Then
breakLoop = True
Else
prnTime = Time
End If
End If
Wend
WordApp.Quit
MsgBox "Document saved and printed!"
' (Документ сохранен и напечатан')
До тех пор пока Word выполняет запись документа в буфер, значение свойства Background PrintingStatus не равно 0, а пока выполняется цикл, работа приложения не будет завершена.
Из-за аппаратных ошибок этот процесс может никогда не закончиться, и, следовательно, приложение будет заблокировано. Каждую минуту, программа спрашивает пользователя, будет ли он ждать или нет. Если пользователь принимает решение завершить распечатку, переменная breakLoop принимает значение True, что приводит к прерыванию цикла While...Wend. Это достаточно простой подход, хотя он требует больших затрат времени работы процессора. Гораздо более эффективным представляется использование в форме элемента управления Timer, позволяющего программно контролировать процесс печати документа.