首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Access VBA中通过模板创建Word文档

在Access VBA中通过模板创建Word文档
EN

Stack Overflow用户
提问于 2019-12-03 22:29:27
回答 1查看 230关注 0票数 0

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

我做了一些研究,一开始我认为它会缺少参考,但可以100%确定它不是。所有用户都在运行access runtime 2000以及office 2010和office 365的混合体。

请看下面的函数,让我知道,如果有任何明显的代码,让我知道,如果需要更多的信息,高兴地提供它。

编辑*我目前面临的问题是用户点击“创建文档”按钮,然后它似乎什么也不做。它不会出错,不会创建文档,也不会像应有的那样全屏打开word。然而,它确实会进入下一部分,询问他们是否愿意将此记录到日志中。我注意到的是,它似乎试图打开Word,这是我看到的使用"Procmon“,但没有在前台打开。

代码语言:javascript
复制
    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 
EN

回答 1

Stack Overflow用户

发布于 2019-12-04 00:14:59

试着像这样使用后期绑定

代码语言:javascript
复制
Dim oword As  Object: set oword = CreateObject("Word.Application")

安装,安装

代码语言:javascript
复制
Dim oword As Word.Application
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59159321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档