Ошибка времени выполнения "429": компонент ActiveX не может создать объект VBA

Я пытаюсь сохранить документы Word с помощью Excel VBA, но получаю сообщение об ошибке "Компонент ActiveX не может создать объект".

При отладке ошибка возникает из строки: Set wrdApps = CreateObject("Word.Application"). Он работал нормально, но потом он только начал давать мне эту ошибку. Кто-нибудь знает, как это исправить? Спасибо за помощь!

Sub saveDoc()

Dim i As Integer
For i = 1 To 2661:
    Dim fname As String
    Dim fpath As String

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    fname = ThisWorkbook.Worksheets(3).Range("H" & i).Value
    fpath = ThisWorkbook.Worksheets(3).Range("G" & i).Value

    Dim wrdApps As Object
    Dim wrdDoc As Object

    Set wrdApps = CreateObject("Word.Application")

    'the next line copies the active document- the ActiveDocument.FullName 
    ' is important otherwise it will just create a blank document
    wrdApps.documents.Add wrdDoc.FullName

    Set wrdDoc = wrdApps.documents.Open(ThisWorkbook.Worksheets(3).Range("f" & i).Value)
    ' do not need the Activate, it will be Activate
    wrdApps.Visible = False  

    ' the next line saves the copy to your location and name
    wrdDoc.SaveAs "I:\Yun\RTEMP DOC & PDF\" & fname

   'next line closes the copy leaving you with the original document
   wrdDoc.Close

   On Error GoTo NextSheet:
NextSheet:
   Resume NextSheet2
NextSheet2:
Next i

With Application
   .DisplayAlerts = True
   .ScreenUpdating = True
   .EnableEvents = True
End With

End Sub

Ответ 1

У меня возникла проблема при обновлении с Windows 7 до 10, когда я взял с собой запас своих скриптов VBA. Я до сих пор не уверен, что является основной причиной ошибки, но в то же время этот кусок кода работал для меня. Это обходной путь, который ограничивает необходимость иметь Word (или Outlook/Excel) уже в открытом (вручную) состоянии, но должен позволять запускать ваш скрипт, если у вас установлены ссылки. Просто измените "CreateObject(" на "GetObject(, ". Это скажет системе использовать уже открытое окно.

Полный код для использования будет:

Dim wrdApps As Object
Dim wrdDoc As Object
Set wrdApps = GetObject(, "Word.Application")

Ответ 2

Является ли wrdDoc инициализированным? Вы пытаетесь использовать wrdDoc до того, как объект был установлен?

wrdApps.documents.Add wrdDoc.FullName
Set wrdDoc = wrdApps.documents.Open(ThisWorkbook.Worksheets(3).Range("f" & i).Value)

Должна ли первая строка быть ActiveDocument.FullName как в комментариях? Итак:

wrdApps.documents.Add ActiveDocument.FullName

Ответ 3

Убедитесь, что библиотека объектов Microsoft Excel и библиотека объектов Microsoft Office отмечены значком Инструменты > Ссылки и что они зарегистрированы.

Если они отмечены галочкой, вам может потребоваться запустить Detect and Repair из меню справки Excel, чтобы убедиться, что установка Office не повреждена каким-либо образом.

Ответ 4

Попробуйте использовать 32-разрядную версию Microsoft Office

Ответ 6

Попробуйте это.. я сталкивался с этим много раз...

поэтому я просто запускаю свой Excel, выполнив поиск по нему (расположенный на панели задач), затем щелкнув правой кнопкой мыши, затем "запустить от имени администратора" или, если вы уже создали файл Excel, откройте его из файла> открыть> просмотреть. избегайте двойного щелчка по файлу Excel, чтобы открыть его напрямую.