My Access Vba выдает ошибку автоматизации '-2147023170 (800706be)' при автоматизации слова - PullRequest
0 голосов
/ 22 мая 2019

Я использую базу данных для извлечения данных, которые мне нужно представить.Поскольку мне нужно представить данные как в альбомной, так и в портретной ориентации, отчет о доступе не поможет.Поэтому я использую Access VBA, чтобы поместить данные в шаблон слова.Однако, когда я запускаю код над полными данными, я продолжаю сталкиваться с ошибкой автоматизации.Слово приложение перестает существовать.

Я запросил, и я не думаю, что у меня есть какие-либо распространенные ошибки кода, связанные с этой проблемой, так что нет объектов со ссылками на слова и т. Д. Я также заменил все ссылки на словаконстанты типа wdcell со своими целочисленными значениями.Я пробежал код в отладке, и когда я пробежал в отладке, код никогда не дает сбой.Я поставил несколько пауз (функция, которая ждет определенное время и выполняет DoEvents), чтобы посмотреть, помогает ли это

Function MoveMergePaste(wdInputName As String, oWord As Word.Application, oWdocMerged As Word.Document) As Long
Dim oWdocMove As Word.Document
Dim oWdocMoveMerged As Word.Document
Dim rst As Recordset
Dim strSQL As String

On Error GoTo ERR_MoveMergePaste

Pause 1
strSQL = "SELECT T.* FROM tblMovementTemp AS T INNER JOIN tblMovementHeader AS H "
strSQL = strSQL & "ON T.FundId = H.FundId ORDER BY tblPosition"
Set rst = CurrentDb.OpenRecordset(strSQL)

Pause 0.5
Set oWdocMove = oWord.Documents.Open(wdInputName)
Pause 0.5
oWdocMove.Bookmarks("PremiumDataStart").Select

rst.MoveFirst
oWord.Selection.TypeText rst!tblElement
oWord.Selection.MoveRight Unit:=12 '(wdcell)
oWord.Selection.TypeText rst!TotalUnits
rst.MoveNext
While Not rst.EOF
    oWord.Selection.MoveRight Unit:=12 '(wdcell)
    oWord.Selection.TypeText rst!tblElement
    oWord.Selection.MoveRight Unit:=12 '(wdcell)
    oWord.Selection.TypeText rst!TotalUnits
    rst.MoveNext
Wend

'Start mail merge Claims
'------------------------------------------------
With oWdocMove.MailMerge
    .MainDocumentType = 0 'wdFormLetters
    .OpenDataSource _
    Name:=CurrentProject.FullName, _
    AddToRecentFiles:=False, _
    LinkToSource:=True, _
    Connection:="QUERY mailmerge", _
    SQLStatement:="SELECT * FROM [tblMovementHeader] "
    .Destination = 0 'wdSendToNewDocument
    .Execute Pause:=False
End With

'Copy movement data into merged document
'------------------------------------------------
Set oWdocMoveMerged = oWord.ActiveDocument
oWdocMoveMerged.Select
oWord.Selection.WholeStory
oWord.Selection.Copy
oWdocMerged.Select
oWord.Selection.EndKey Unit:=6 '(wdstory)
oWord.Selection.PasteAndFormat (wdFormatOriginalFormatting)

MoveMergePaste = 0

EXIT_MoveMergePaste:
    On Error Resume Next
    'Close files
    '------------------------------------------------
    oWdocMove.Close SaveChanges:=False
    oWdocMoveMerged.Close SaveChanges:=False

    'Release objects
    '------------------------------------------------
    Set oWdocMove = Nothing
    Set oWdocMoveMerged = Nothing
    Set rst = Nothing
    Exit Function

ERR_MoveMergePaste:
    MoveMergePaste = Err.Number
    MsgBox Err.Description
    Resume EXIT_MoveMergePaste

End Function

Я передаю строку, которая является путем к шаблону слова, объекту приложения словаи существующий документ с открытым словом.подпрограмма создает набор данных для записи, открывает шаблон слова, находит закладку в шаблоне и затем записывает данные из набора записей в шаблон.После этого он выполняет почтовое слияние по шаблону и копирует данные из вновь созданного объединенного документа в открытый документ.Возвращает 0 в случае успеха.Он закрывает шаблон и объединенный документ и освобождает объекты.

В основном это работает, но слишком часто, чтобы его можно было использовать, я получаю ошибку автоматизации.'-2147023170 (800706be)'.Ошибка обычно возникает из-за того, что слово перестало существовать.Если я нарушу код, строка кода, которая возвращает ошибку, будет

oWdocMove.Bookmarks ("PremiumDataStart"). Выберите

Но строка в порядке, ошибка в том, что слово больше не существует.

...