Creating a new word doc and putting some VBA code behind it

  • Thread starter Thread starter Mike NG
  • Start date Start date
M

Mike NG

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
 
Hi Mike,

See the article "Changing the selected (current) printer in Word without
changing the system default printer" at:

http://www.mvps.org/word/FAQs/MacrosVBA/ChangeCurPrinter.htm

Please post any further questions or followup to the newsgroups for the
benefit of others who may be interested. Unsolicited questions forwarded
directly to me will only be answered on a consulting basis.

Hope this helps
Doug Robbins - Word MVP
 
See the article "Changing the selected (current) printer in Word without
changing the system default printer" at:

http://www.mvps.org/word/FAQs/MacrosVBA/ChangeCurPrinter.htm

Please post any further questions or followup to the newsgroups for the
benefit of others who may be interested. Unsolicited questions forwarded
directly to me will only be answered on a consulting basis.
OK thanks. I will give this a go some time, and let you know how I get
on
 
See the article "Changing the selected (current) printer in Word without
changing the system default printer" at:

http://www.mvps.org/word/FAQs/MacrosVBA/ChangeCurPrinter.htm

Please post any further questions or followup to the newsgroups for the
benefit of others who may be interested. Unsolicited questions forwarded
directly to me will only be answered on a consulting basis.
That was superb - worked a treat thanks

I'd still like to put an Application.Quit behind the _Close event of the
mail merge results document though. The only other solution would be to
put some code in the mail merge main document which loops round counting
document count with a DoEvents in between - which seems to be having
slight performance impacts on my system

This is the code in my mail merge main document

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
MailMerge.OpenDataSource sDataSrc
MailMerge.Execute

'Mail merge result document
ActiveDocument.Saved = True

'Mail merge main document
ThisDocument.Close False

Done:

End Sub
 
Back
Top