View Single Post
  #1   Report Post  
Posted to microsoft.public.excel.programming,microsoft.public.word.vba.beginners
Mike NG Mike NG is offline
external usenet poster
 
Posts: 87
Default Creating a new word doc and putting some VBA code behind it

I am opening a mail merge main document with the following code behind
it. My current method involves controlling everything from the mail
merge main document, with a loop using DoEvents. This seems rather
cumbersome. It would be neat if I could put some VBA behind the
Document_Close event of the mail merge result file. Ideally, I'd like
to pass the queue name by parameter which would be written into my word
document directly, so I don't have to read it from the file again


Option Explicit
Private Sub Document_Open()

Dim sDataSrc As String
Dim sThisDoc As String

sThisDoc = ThisDocument.Name
sThisDoc = Left(sThisDoc, Len(sThisDoc) - 4) & "Data.doc"
sDataSrc = ThisDocument.Path & "\" & sThisDoc

'Skip MailMerge if data source not present....
On Error Resume Next
MailMerge.OpenDataSource sDataSrc
If Err Then GoTo Done
MailMerge.Execute

'This created mail merge document
ActiveDocument.Saved = True
ThisDocument.Saved = True

Done:
SetNonFinePrint
WaitForClose

End Sub
Sub SetFinePrint()

Dim iHandle As Integer
Dim sPrinter As String


'FinePrint will always be the first row in the file
iHandle = FreeFile
Open "C:\PRINTERS.DAT" For Input As #iHandle
Input #iHandle, sPrinter
ActivePrinter = sPrinter
Close #iHandle

End Sub
Sub SetNonFinePrint()

Dim iHandle As Integer
Dim sPrinter As String


'FinePrint will always be the first row in the file
iHandle = FreeFile
Open "C:\PRINTERS.DAT" For Input As #iHandle
Input #iHandle, sPrinter

If Not EOF(iHandle) Then
Input #iHandle, sPrinter
End If

ActivePrinter = sPrinter
Close #iHandle

End Sub
Sub WaitForClose()

Dim iCount As Integer


iCount = Documents.Count

Do Until Documents.Count < iCount
DoEvents
Loop

SetFinePrint
Application.Quit

End Sub


The reason for doing all of this is my need to manipulate print queues
around the opening and closing of the mail merge result document. The
trouble being, that setting ActivePrinter in a word document changes the
system's default print queue, whereas setting it in excel is only
temporary within that workbook, it doesn't change the system default

--
Mike