VBA 创建编号列表时访问 Word 错误

VBA Access to Word error when creating numbered list

我有一个用于创建 Word 文档的 Access 数据库。我正在使用 Office 2016。当我 运行 代码时,我要么得到

Error 462 "Remote server machine does not exist or is unavailable"

Error -2147023170 "Error: Automation error, The remote procedure call failed"

Word 关闭。

On Error GoTo Err_CMD_Test

'Open Word document
    Set GBL_objWord = CreateObject("Word.Application")
    GBL_objWord.Visible = True
    GBL_objWord.Activate
    Set GBL_objDoc = GBL_objWord.Documents.Add
    GBL_objDoc.Activate

'Traitement
    GBL_objWord.Selection.TypeText Text:="List of something :"
    GBL_objWord.Selection.TypeParagraph

    GBL_objWord.Selection.TypeText Text:="Number one"
    GBL_objWord.Selection.Range.ListFormat.ApplyListTemplate ListTemplate:=ListGalleries(2).ListTemplates(1), ContinuePreviousList:=True, ApplyTo:=0, DefaultListBehavior:=2
    GBL_objWord.Selection.TypeParagraph
    GBL_objWord.Selection.TypeText Text:="Number two"
    GBL_objWord.Selection.Range.ListFormat.ApplyListTemplateWithLevel ListTemplate:=ListGalleries(wdNumberGallery).ListTemplates(1), ContinuePreviousList:=False, ApplyTo:=wdListApplyToWholeList, DefaultListBehavior:=wdWord10ListBehavior


Exit_CMD_Test:
    Exit Sub

Err_CMD_Test:
    Select Case Err.Number
    Case Else
        MsgBox "Erreur : " & Err.Description & vbCrLf & _
               "Numéro : " & Err.Number & vbCrLf & _
               "Procédure : CMD_Test", vbCritical, ""
        Resume Next
    End Select

代码中断于

GBL_objWord.Selection.Range.ListFormat.ApplyListTemplate _
  ListTemplate:=ListGalleries(2).ListTemplates(1), _
  ContinuePreviousList:=True, ApplyTo:=0, DefaultListBehavior:=2

以及

GBL_objWord.Selection.Range.ListFormat.ApplyListTemplateWithLevel _
  ListTemplate:=ListGalleries(wdNumberGallery).ListTemplates(1), _
  ContinuePreviousList:=False, ApplyTo:=wdListApplyToWholeList, _
  DefaultListBehavior:=wdWord10ListBehavior**"

我使用方法 ApplyListTemplateApplyListTemplateWithLevel 只是为了尝试两者,结果是一样的:一个错误。在第一个中,我更改了变量 wdNumberGallerywdListApplyToWholeListwdWord10ListBehavior 以及它们在 MSDN 网站上可用的枚举值,以试图查明错误。

很遗憾,我无法完成这项任务。我正在寻找的是具有以下文本的 Word 文档:


某物清单:

  1. 第一名

  2. 二号

    ...


谢谢大家的帮助

问题来自 Access VBA 在使用后期绑定时无法识别 ListGalleries。如果 Word.Application 对象完全限定,代码对我有用:

Set GBL_objWord = CreateObject("Word.Application")
GBL_objWord.Visible = True
GBL_objWord.Activate
Set GBL_objDoc = GBL_objWord.Documents.Add
GBL_objDoc.Activate

'Traitement
GBL_objWord.Selection.TypeText Text:="List of something :"
GBL_objWord.Selection.TypeParagraph

GBL_objWord.Selection.TypeText Text:="Number one"
GBL_objWord.Selection.Range.ListFormat.ApplyListTemplate _
  ListTemplate:=GBL_objWord.ListGalleries(2).ListTemplates(1), _
  ContinuePreviousList:=True, ApplyTo:=0, DefaultListBehavior:=2
GBL_objWord.Selection.TypeParagraph
GBL_objWord.Selection.TypeText Text:="Number two"

我做了一些研究,下面是我的发现。

首先,我忘了把变量声明放在第一个 post 中。这是我错过的:

Option explicit
Public GBL_objWord As Object
Public GBL_objDoc As Object

此外,我没有提到在 Tools/References 中选择了 Microsoft Word 16.0 对象库等。

接下来,我了解了早期绑定和后期绑定之间的区别。我的变量应该是:

Public GBL_objWord As Word.Application
Public GBL_objDoc As Word.Document

此更改没有纠正错误,但是当我 运行 非常长的程序,结果是一个 7 页的 Word 文档时,这个过程似乎加快了很多。

既然我可以使用所有 Word 功能,我尝试了

GBL_objWord.Selection.Range.ListFormat.ApplyNumberDefault

而且效果很好!!!

即使您的 none 回答是好的,我也要感谢你们的帮助和指导,因为这些回答使我走上了正确的轨道。

谢谢,

此致