从Access VBA中的模板创建Word文档
我从20年前建立Access数据库的人那里继承了一个数据库。最近,对于使用它的90个用户中的一些用户来说,从access填充的模板创建Word文档的功能已经停止对一些用户起作用。我已经安装和重新安装了很多次office,我已经使机器彼此完全相同,但仍然有一台工作,另一台不工作。我希望下面的函数足以让比我更了解VBA的人看到一些错误 我做了一些研究,一开始我认为它会丢失参考文献,但我可以100%肯定它不会。所有用户都在运行access runtime 2000以及office 2010和office 365的混合版本工作的用户都在office 365和office 2010上 请看下面的函数,让我知道是否有什么是显而易见的代码,并让我知道如果需要更多的信息很高兴提供它 编辑*我目前面临的问题是,用户单击“创建文档”按钮,然后它似乎什么都不做。它不会出错,不会创建文档,也不会像应该的那样打开word全屏。不过,它会转到下一部分,询问他们是否愿意将此记录在日志中。我注意到它似乎试图打开Word,我看到它使用“Procmon”,但前景中没有打开任何内容从Access VBA中的模板创建Word文档,vba,ms-access,Vba,Ms Access,我从20年前建立Access数据库的人那里继承了一个数据库。最近,对于使用它的90个用户中的一些用户来说,从access填充的模板创建Word文档的功能已经停止对一些用户起作用。我已经安装和重新安装了很多次office,我已经使机器彼此完全相同,但仍然有一台工作,另一台不工作。我希望下面的函数足以让比我更了解VBA的人看到一些错误 我做了一些研究,一开始我认为它会丢失参考文献,但我可以100%肯定它不会。所有用户都在运行access runtime 2000以及office 2010和offic
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
Public Sub-PRINT\u DOC(模板为字符串)
Dim-oword作为Word.Application
'数组绑定从20增加到100[v1.1]
Dim字段名(100)作为字符串
作为字符串的Dim strSQL
Dim文件\u STR作为字符串
dimdbs作为数据库
作为整数的Dim计数器
作为整数的Dim COUNTA
错误时转到notloaded
将错误设置为整数
Err.NUMBER=0
Set oword=新单词。应用程序
未加载:
如果Err.NUMBER=429,则
Set oword=新单词。应用程序
theError=Err.NUMBER
如果结束
错误时转到错误打印文档
沙漏真的吗
oword.Documents.Add模板
oword.Visible=True
奥沃德,激活
计数器=oword.ActiveDocument.FormFields.COUNT
对于COUNTA=1的计数器
FIELDNAME(COUNTA)=oword.ActiveDocument.FormFields(COUNTA.Name)
下一个
对于COUNTA=1的计数器
选择案例字段名(COUNTA)
案例“联系人”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![联络]
案例“地址”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![完整地址]
案例“参考”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![参考]
案例“传真”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![传真号码]
案例“主题”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![JOBTITLE]&“-”和表格![frm_通信]![主题]
案例“作业”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![职位名称]
案例“报告”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![主题]
案例“日期”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![日期]
案例“已签名”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![签名]
案例“FROM”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![来自]
案例“TO”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![致]
案例“CC”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![抄送]
案例“亲爱的”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![亲爱的]
案例“发票金额”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![发票金额]
案例“发票\增值税”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![发票增值税]
案例“发票注释”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![发票附注]
案例“发票编号”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![发票编号]
案例“发票总额”:oword.ActiveDocument.FormFields(COUNTA)。选择
oword.Selection.InsertBefore表单![frm_通信]![发票总额]
结束选择
下一个
oword.Visible=True
奥沃德,激活
如果形式![frm_通信]![COR PATH]“”且不为空(形式![frm_通信]![COR PATH])
文件=表格![frm_通信]![COR PATH]&“\”表单![frm_通信]![文件参考]
oword.ActiveDocument.SaveAs文件名:=文件
如果结束
沙漏假文件
设置oword=无
退出打印文档:
出口接头
错误\u打印\u文档:
MsgBox错误$,vb感叹号,应用程序名称
恢复退出\u打印\u文档
端接头
尝试使用后期绑定
Dim oword As Object: set oword = CreateObject("Word.Application")
Dim oword As Word.Application