在Word

时间:2018-01-20 11:49:52

标签: vba ms-access access-vba

我正在尝试在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中打开报表。但是,不是打开带有上面代码的字段的报表,而是在填写这些字段之前打开报表。 “填充”报告仍然在访问时打开,因此我知道代码可以正常工作。

任何人都可以帮助我吗?我一直在努力解决这个问题。

1 个答案:

答案 0 :(得分:0)

仅在触发并完成多个事件后才会完全生成报告。访问报告的处理非常挑剔,事件顺序并不总是直观的。实际上,报表视图与打印预览的事件顺序不同,因为后者确保完全分页,而屏幕视图不生成页面。最佳做法是不在报表事件中包含与报表格式无直接关系的代码。特别是,Report_Load()在其他事件之前运行,因此在此事件期间输出报告非常早。尽管为报表控件指定了值,但在此事件期间尚未完成任何布局。

此外,生成屏幕视图的过程将与从'DoCmd.OutputTo`生成文件输出分开,因此报告在屏幕上看起来不错的事实与RTF的生成是分开的问题文件。 (我很惊讶代码不会因递归尝试保存文件输出而产生错误。)

相反,请从报表模块外部的代码中调用DoCmd.OutputTo,也许从表单中调用。