VBA Access to Word ошибка при создании нумерованного списка

У меня есть база данных Access, из которой я создаю документы Word. Я использую Office 2016. Когда я запускаю код, я либо получаю

Ошибка 462 "Удаленный сервер не существует или недоступен"

или же

Ошибка -2147023170 "Ошибка: ошибка автоматизации, сбой удаленного вызова процедуры"

и слово закрывается.

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**"

Я использую методы ApplyListTemplate а также ApplyListTemplateWithLevel просто попробовать оба, и результат один и тот же: ошибка. На первом я изменил переменные wdNumberGallery, wdListApplyToWholeList, wdWord10ListBehavior с их значениями перечисления, доступными на веб-сайте MSDN в попытке точно определить ошибку.

К сожалению, я не смог выполнить эту задачу. Я ищу документ Word со следующим текстом:


Список чего-то:

  1. Номер один

  2. Номер два

    ...


Спасибо за вашу помощь

3 ответа

Решение

Проблема в том, что 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"

У меня тоже были некоторые ошибки, и вот как я это исправил:

Вам нужно сначала создать объект после того, как вы создали свое текстовое приложение, подобное этому

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

Dim formatter As Object
Set formatter = GBL_objWord.ListGalleries(2).ListTemplates(1)

Затем замените шаблон списка объектом, и этот раздел больше не должен возвращать ошибку:

      GBL_objWord.Selection.Range.ListFormat.ApplyListTemplate _
ListTemplate:=formatter, _
ContinuePreviousList:=True, ApplyTo:=0, DefaultListBehavior:=2

Я провел некоторые исследования, и вот что я нашел.

Во-первых, я забыл поместить объявление переменной в своем первом посте. Вот что я пропустил:

Option explicit
Public GBL_objWord As Object
Public GBL_objDoc As Object

Кроме того, я не упомянул, что библиотека объектов Microsoft Word 16.0, среди прочего, была выбрана в разделе "Инструменты / Ссылки".

Затем я узнал разницу между ранним и поздним связыванием. Мои переменные должны были быть:

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

Это изменение не исправило ошибку, но когда я запускаю очень длинные процедуры, в результате которых получается документ Word на 7 страниц, процесс, похоже, ускорился.

Теперь, когда у меня есть доступ ко всем функциям Word, я попытался

GBL_objWord.Selection.Range.ListFormat.ApplyNumberDefault

И это работает отлично!!!

Даже если ни один из ваших ответов не был хорошим, я хотел бы поблагодарить вас за вашу помощь и руководство, поскольку эти ответы направили меня на правильный путь.

Спасибо,

Искренне

Другие вопросы по тегам