Hello
Greetings
I have a single page template which i use to create over 100 payment vouchers for contractors( data is obtained from a record set in access Database)
The code i have currently can create separate documents from the template i.e 100 word documents./files and save them.
What i want if it is possible to a create a single word document with say the 100 pages . Each page for the contractor
Here is the complete code
Private Sub cmdCreate_Click()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
Dim strFilePath As String
Dim strName As String
Dim strTemp As String
Dim icount As Integer
Dim objWord As Word.Application
Dim wrdDoc As Word.Document
Dim objRange As Word.Range
Dim intCount As Integer
Dim strMsg As String
strSQL = " SELECT tblPeriods.PeriodNumber, tblLBCTransactions.ContractorID, Sum([StandardRate]*[ActualQuantities]) AS Amount, tblLBCTransactions.TransactionID, tblLBCTransactions.Print, tblLBCTransactions.DateIssued, tblRoads.RoadName,
tblSections.Chainage, tblContractors.fName" & _
" FROM tblPeriods INNER JOIN ((((tblRoads INNER JOIN tblSections ON tblRoads.RoadID = tblSections.RoadID) INNER JOIN (tblContractors INNER JOIN (tblLBCPackage INNER JOIN tblPackage_Contractor ON tblLBCPackage.PackageID
= tblPackage_Contractor.PackageID) ON tblContractors.ContractorID = tblPackage_Contractor.ContractorID) ON tblSections.SectionID = tblLBCPackage.SectionID) INNER JOIN tblLBCTransactions ON (tblLBCPackage.PackageID = tblLBCTransactions.PackageID) AND (tblContractors.ContractorID
= tblLBCTransactions.ContractorID)) INNER JOIN tblLBCTransactionsDetails ON tblLBCTransactions.TransactionID = tblLBCTransactionsDetails.TransactionID) ON tblPeriods.PeriodID = tblLBCTransactions.PeriodID " & _
" GROUP BY tblPeriods.PeriodNumber, tblLBCTransactions.ContractorID, tblLBCTransactions.TransactionID, tblLBCTransactions.Print, tblLBCTransactions.DateIssued, tblRoads.RoadName, tblSections.Chainage, tblContractors.fName
" & _
" HAVING (((tblLBCTransactions.Print)=True));"
Debug.Print strSQL
On Error GoTo myErr
If Me.lstPeriod.ItemsSelected.Count = 0 Then
MsgBox " No Period selected", vbExclamation
Exit Sub
End If
Set db = CurrentDb()
Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)
If rst.EOF Then
MsgBox " No Contract Selected for Printing", vbInformation
Exit Sub
End If
rst.MoveFirst
rst.MoveLast
intCount = rst.RecordCount
strMsg = "Printing " & intCount & " Set of Employee Contracts"
strTemp = myFileName ' a private function which uses the File Dialog for the user to select the template
If Len(strTemp) = 0 Then
MsgBox " No template selected", vbCritical
Exit Sub
End If
Set objWord = CreateObject("Word.Application")
Application.SysCmd acSysCmdInitMeter, strMsg, intCount
rst.MoveFirst
DoCmd.Hourglass True
Do While Not rst.EOF
Set wrdDoc = objWord.Documents.Add(strTemp)
objWord.Visible = False
'Add information to the template
With wrdDoc
Set objRange = .Bookmarks("Name").Range
objRange.Text = rst!fName
objRange.Font.Bold = True
objRange.Font.Italic = True
.Bookmarks.Add "Name", objRange
Set objRange = .Bookmarks("Amount").Range
objRange.Text = Format(Nz(rst!Amount, 0), "Currency")
objRange.Font.Bold = True
objRange.Font.Italic = True
.Bookmarks.Add "Amount", objRange
Set objRange = .Bookmarks("Amount1").Range
objRange.Text = Format(Nz(rst!Amount, 0), "Currency")
objRange.Font.Bold = True
objRange.Font.Italic = True
.Bookmarks.Add "Amount1", objRange
Set objRange = .Bookmarks("Amount2").Range
objRange.Text = Format(Nz(rst!Amount, 0), "Currency")
objRange.Font.Bold = True
objRange.Font.Italic = True
.Bookmarks.Add "Amount2", objRange
Set objRange = .Bookmarks("Amount3").Range
objRange.Text = Format(Nz(rst!Amount, 0), "Currency")
objRange.Font.Bold = True
objRange.Font.Italic = True
.Bookmarks.Add "Amount3", objRange
Set objRange = .Bookmarks("AmountW").Range
objRange.Text = English(Nz(rst!Amount, 0))
objRange.Font.Bold = True
objRange.Font.Italic = True
.Bookmarks.Add "AmountW", objRange
Set objRange = .Bookmarks("Cert").Range
objRange.Text = rst!PeriodNumber
objRange.Font.Bold = True
objRange.Font.Italic = True
.Bookmarks.Add "Cert", objRange
Set objRange = .Bookmarks("Date").Range
objRange.Text = Format(Me.txtDate, "dd/mmmm/yyyy")
objRange.Font.Bold = True
objRange.Font.Italic = True
.Bookmarks.Add "Date", objRange
Set objRange = .Bookmarks("Date1").Range
objRange.Text = Format(Me.txtDate, "dd/mmmm/yyyy")
objRange.Font.Bold = True
objRange.Font.Italic = True
.Bookmarks.Add "Date1", objRange
Set objRange = .Bookmarks("Road").Range
objRange.Text = rst!RoadName
objRange.Font.Bold = True
objRange.Font.Italic = True
.Bookmarks.Add "Road", objRange
strFilePath = CurrentProject.Path & "" & "Vouchers" & ""
If Len(Dir(strFilePath, vbDirectory)) = 0 Then
MkDir strFilePath
End If
strName = strFilePath & rst!fName & ".docx"
.SaveAs (strName)
.Close
End With
rst.MoveNext
Application.SysCmd acSysCmdUpdateMeter, intCount
Loop
rst.Close
'Exit Word
myExit:
Set objRange = Nothing
Application.SysCmd acSysCmdClearStatus
DoCmd.Hourglass False
Set rst = Nothing
Set wrdDoc = Nothing
objWord.Quit False
Set objWord = Nothing
Exit Sub
myErr:
MsgBox "Err" & err.Description
Resume myExit
End Sub
Thanks so much
Ronald