VBA Access to Word ошибка при создании нумерованного списка - PullRequest
0 голосов
/ 28 августа 2018

У меня есть база данных 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. Номер два

    ...


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

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

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

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

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

И это прекрасно работает !!!

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

Спасибо,

С уважением

0 голосов
/ 28 августа 2018

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