【发布时间】:2020-03-28 06:29:05
【问题描述】:
我从大约 20 年前构建它的人那里继承了一个 Access 数据库。最近,对于 90 位使用该功能的用户来说,从通过访问权限填充的模板创建 Word 文档的功能已停止对某些用户工作。我已经安装和重新安装了很多次办公室,我已经制作了彼此相同的机器,但仍然有一台可以工作,一台不能。我希望下面的函数足以让那些比我更了解 VBA 的人看到一些错误。
我做了一些研究,起初我认为它会丢失参考文献,但可以 100% 确定它不是。所有用户都在运行访问运行时 2000 以及 Office 2010 和 Office 365 的混合版本,工作的用户同时使用 Office 365 和 Office 2010。
请查看下面的函数,如果代码有任何明显的地方,请告诉我,如果需要更多信息,请告诉我很乐意提供。
编辑* 我目前面临的问题是用户单击“创建文档”按钮,然后它似乎什么也没做。它不会出错,不会创建文档,也不会像应有的那样全屏打开 word。但是,它确实会进入下一部分,询问他们是否愿意将其记录在日志中。我注意到它似乎试图打开 Word,我已经看到使用“Procmon”但没有在前台打开。
Public Sub PRINT_DOC(TEMPLAT As String)
Dim oword As Word.Application
' Array bound increased from 20 to 100 [v1.1]
Dim FIELDNAME(100) As String
Dim strSQL As String
Dim FILE_STR As String
Dim dbs As Database
Dim COUNTER As Integer
Dim COUNTA As Integer
On Error GoTo notloaded
Dim theError As Integer
Err.NUMBER = 0
Set oword = New Word.Application
notloaded:
If Err.NUMBER = 429 Then
Set oword = New Word.Application
theError = Err.NUMBER
End If
On Error GoTo Err_PRINT_DOC
DoCmd.Hourglass True
oword.Documents.Add TEMPLAT
oword.Visible = True
oword.Activate
COUNTER = oword.ActiveDocument.FormFields.COUNT
For COUNTA = 1 To COUNTER
FIELDNAME(COUNTA) = oword.ActiveDocument.FormFields(COUNTA).Name
Next
For COUNTA = 1 To COUNTER
Select Case FIELDNAME(COUNTA)
Case "CONTACT": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![CONTACT]
Case "ADDRESS": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![FULL_ADDRESS]
Case "REFERENCE": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![REFERENCE]
Case "FAX": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![FAX_NO]
Case "SUBJECT": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![JOBTITLE] & " - " & Forms![frm_correspondence]![SUBJECT]
Case "JOB": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![JOBTITLE]
Case "REPORT": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![SUBJECT]
Case "DATE": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![DATE]
Case "SIGNED": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![SIGNED]
Case "FROM": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![FROM]
Case "TO": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![TO]
Case "CC": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![CC]
Case "DEAR": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![DEAR]
Case "INVOICE_SUM": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![INVOICE SUM]
Case "INVOICE_VAT": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![INVOICE VAT]
Case "INVOICE_NOTES": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![INVOICE NOTES]
Case "INVOICE_NUMBER": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![INVOICE NO]
Case "INVOICE_TOTAL": oword.ActiveDocument.FormFields(COUNTA).SELECT
oword.Selection.InsertBefore Forms![frm_correspondence]![INVOICE TOTAL]
End Select
Next
oword.Visible = True
oword.Activate
If Forms![frm_correspondence]![COR PATH] <> "" And Not IsNull(Forms![frm_correspondence]![COR PATH]) Then
FILE_STR = Forms![frm_correspondence]![COR PATH] & "\" & Forms![frm_correspondence]![FILE REF]
oword.ActiveDocument.SaveAs FILENAME:=FILE_STR
End If
DoCmd.Hourglass False
Set oword = Nothing
Exit_PRINT_DOC:
Exit Sub
Err_PRINT_DOC:
MsgBox Error$, vbExclamation, APP_NAME
Resume Exit_PRINT_DOC
End Sub
【问题讨论】:
-
已经停止工作是什么意思确切? -- 还有Access 2000 运行时,真的吗?这有点过时了。
-
已在原始帖子中添加了一个编辑,解释了什么不起作用。是的,我知道 access 2000 已经过时了。
-
好的。您必须设置断点并单步执行代码,以查看失败的确切位置。那么我们也许可以提供帮助。见How to debug VBA code