从Access VBA中的模板创建Word文档

从Access VBA中的模板创建Word文档,vba,ms-access,Vba,Ms Access,我从20年前建立Access数据库的人那里继承了一个数据库。最近,对于使用它的90个用户中的一些用户来说,从access填充的模板创建Word文档的功能已经停止对一些用户起作用。我已经安装和重新安装了很多次office,我已经使机器彼此完全相同,但仍然有一台工作,另一台不工作。我希望下面的函数足以让比我更了解VBA的人看到一些错误 我做了一些研究,一开始我认为它会丢失参考文献,但我可以100%肯定它不会。所有用户都在运行access runtime 2000以及office 2010和offic

我从20年前建立Access数据库的人那里继承了一个数据库。最近,对于使用它的90个用户中的一些用户来说,从access填充的模板创建Word文档的功能已经停止对一些用户起作用。我已经安装和重新安装了很多次office,我已经使机器彼此完全相同,但仍然有一台工作,另一台不工作。我希望下面的函数足以让比我更了解VBA的人看到一些错误

我做了一些研究,一开始我认为它会丢失参考文献,但我可以100%肯定它不会。所有用户都在运行access runtime 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 
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