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 со следующим текстом:
Список чего-то:
Номер один
Номер два
...
Спасибо за вашу помощь
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
И это работает отлично!!!
Даже если ни один из ваших ответов не был хорошим, я хотел бы поблагодарить вас за вашу помощь и руководство, поскольку эти ответы направили меня на правильный путь.
Спасибо,
Искренне