我正在尝试在MS Word中打开MS Access报告(用于编辑)。 使用MS Access应用程序打开Access报告,并使用报告的VBA中的“Form_Load()”函数填充报告中的某些字段。 (见下面的代码)
FactuurInfo.setDebiteur GBL_debiteurId
'''GBL_factuurId = FactuurInfo.getInfo("factuurId")
'Set date & location
Datum_txt.Caption = "Ede, " & Format(Date, "dd MMMM yyyy")
'Set left part of header
'''Header_left_info.Caption = "Dental Zorg/Incasso" & vbNewLine & _
''' "2004253/RA" & vbNewLine & _
''' ""
Header_left_info.Caption = FactuurInfo.getInfo("zaak") & vbNewLine & _
FactuurInfo.getInfo("referentie") & vbNewLine & _
""
'Set right part of header
Header_right_info.Caption = "Mr C.A. Hage" & vbNewLine & _
"0318 - 657635" & vbNewLine & _
"0318 - 657640" & vbNewLine & _
"harmsen@hageadvocaten.nl"
'Get text from templates table
Dim maintext As String
query = "SELECT * FROM Templates WHERE Id = " & GBL_templateId
Set DB = CurrentDb
Set rst = DB.OpenRecordset(query)
rst.MoveLast
'Fill fields
maintext = rst.Fields("Tekst").value
'replace keywords
Dim str As String, openKeyWord As String, closeKeyWord As String
Dim openPos As Integer
Dim closePos As Integer
Dim midBit As String
openKeyWord = "\["
closeKeyWord = "\]"
Do While (InStr(maintext, openKeyWord))
openPos = InStr(maintext, openKeyWord)
closePos = InStr(maintext, closeKeyWord)
midBit = Mid(maintext, openPos + Len(openKeyWord), closePos - openPos - Len(closeKeyWord))
maintext = Replace(maintext, openKeyWord & midBit & closeKeyWord, FactuurInfo.getInfo(midBit))
Loop
'replace newlines
maintext = Replace(maintext, "\n", vbNewLine)
Maintext_txt.Caption = maintext
'open in word
If GBL_openInWord Then
DoCmd.OutputTo acOutputReport, "testReport", acFormatRTF, strFolderName & "/testReport.rtf", True
End If
在函数的最后,它在Word中打开报表。但是,不是打开带有上面代码的字段的报表,而是在填写这些字段之前打开报表。 “填充”报告仍然在访问时打开,因此我知道代码可以正常工作。
任何人都可以帮助我吗?我一直在努力解决这个问题。
答案 0 :(得分:0)
仅在触发并完成多个事件后才会完全生成报告。访问报告的处理非常挑剔,事件顺序并不总是直观的。实际上,报表视图与打印预览的事件顺序不同,因为后者确保完全分页,而屏幕视图不生成页面。最佳做法是不在报表事件中包含与报表格式无直接关系的代码。特别是,Report_Load()
在其他事件之前运行,因此在此事件期间输出报告非常早。尽管为报表控件指定了值,但在此事件期间尚未完成任何布局。
此外,生成屏幕视图的过程将与从'DoCmd.OutputTo`生成文件输出分开,因此报告在屏幕上看起来不错的事实与RTF的生成是分开的问题文件。 (我很惊讶代码不会因递归尝试保存文件输出而产生错误。)
相反,请从报表模块外部的代码中调用DoCmd.OutputTo
,也许从表单中调用。