J'essaie d'enregistrer des documents Word à l'aide d'Excel VBA, mais l'erreur "Le composant ActiveX ne peut pas créer d'objet".
Lorsque je débogue, l'erreur provient de la ligne: Set wrdApps = CreateObject("Word.Application")
. Il fonctionnait bien, mais il a juste commencé à me donner cette erreur. Est-ce que quelqu'un sait comment réparer ceci? Merci pour l'aide!
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
WrdDoc est-il initialisé? Essayez-vous d'utiliser wrdDoc avant que l'objet ait été défini?
wrdApps.documents.Add wrdDoc.FullName
Set wrdDoc = wrdApps.documents.Open(ThisWorkbook.Worksheets(3).Range("f" & i).Value)
La première ligne doit-elle être ActiveDocument.FullName comme dans les commentaires? Alors:
wrdApps.documents.Add ActiveDocument.FullName
J'ai eu un problème lors de la mise à niveau de Windows 7 à 10 lorsque j'ai apporté mon stock de scripts vba. Je ne sais toujours pas quelle est la cause première de l'erreur, mais entre-temps, ce morceau de code a fonctionné pour moi . Il s'agit d'une solution de contournement qui limite la nécessité d'avoir Word (ou Outlook/Excel) déjà dans open (manuellement), mais doit permettre à votre script de s'exécuter si vous avez défini vos références. Il suffit de remplacer "CreateObject (") par "GetObject (,". Cela indiquera au système d’utiliser une fenêtre déjà ouverte.
Le code complet à utiliser serait:
Dim wrdApps As Object
Dim wrdDoc As Object
Set wrdApps = GetObject(, "Word.Application")
Vérifiez que la bibliothèque d'objets Microsoft Excel et la bibliothèque d'objets Microsoft Office sont cochées dans Outils> Références et qu'elles ont été enregistrées.
Si elles sont cochées, vous devrez peut-être exécuter la fonction Détecter et réparer à partir du menu Aide d'Excel pour vous assurer que l'installation d'Office n'est pas corrompue.