2017-07-31 1 views
0

Pouvez-vous vérifier ce qui manque dans mon code? Lorsqu'il atteint wrd.Visible = True, il me donne l'erreur "Erreur d'exécution 91: Variable d'objet ou Avec la variable de bloc non définie".Qu'est-ce qui ne va pas avec mon code - "Erreur d'exécution 91: Variable d'objet ou Avec une variable de bloc non définie"

avoir activé Microsoft Word 14.0 Object Library

OBL SS

Sub Exceltoword_template() 
'Declares and set w as active worksheet 
Dim w As Worksheet 
Set w = ActiveWorkbook.ActiveSheet 
'Declaration for word app 
Dim wrd As Object 
Dim worddoc As Word.Document 

'Optimize Code 
    Application.ScreenUpdating = False 
    Application.EnableEvents = False 

On Error Resume Next 
'Is MS Word already opened? 
'      Set wrd = GetObject(class:="Word.Application") 
      Set wrd = GetObject(class:="Word.Application") 
'Clear the error between errors 
      Err.Clear 
'If MS Word is not already open then open MS Word 
      If wrd Is Nothing Then Set wrd = CreateObject(class:="Word.Application") 
'     Handle if the Word Application is not found 
     If Err.Number = 429 Then 
     MsgBox "Microsoft Word could not be found, aborting." 
     GoTo EndRoutine 
     End If 

On Error GoTo 0 
'Make MS Word Visible and Active 

wrd.Visible = True 
wrd.Activate 


EndRoutine: 
'Optimize Code 
    Application.ScreenUpdating = True 
    Application.EnableEvents = True 
End Sub 
+0

Cette erreur doit provenir d'ailleurs - le code est fonctionnel à condition que Word 2010 soit installé. –

+0

Le numéro d'erreur est-il supérieur à zéro avant de demander le numéro 429? – reporter

+0

@ DarrenBartrup-Cook oui, j'utilise la version 2010. –

Répondre

0

Je vous conseille généralement de ne pas utiliser la liaison anticipée, même si elle peut aider à IntelliSense. Je pourrais obtenir la même erreur que vous en omettant le mot Set lors de la référence de Word, mais à part cela, cela a bien fonctionné.

Essayez ce code; il n'a pas besoin d'une référence à Word:

Public Sub Test() 

    Dim oWD As Object 
    Dim oDoc As Object 
    Dim wrkSht As Worksheet 

    Set wrkSht = ThisWorkbook.Worksheets("Sheet1") 'Be precise, don't trust to Active or Selection. 
    Set oWD = CreateWD 

    Set oDoc = oWD.Documents.Add 'Create a new document. 
    'Set oDoc = oWD.ActiveDocument 
    'Set oDoc = oWD.Documents("My Document.docx") 
    'Set oDoc = oWD.Windows("My Document.docx [Compatibility Mode]") '- As it appears on the title bar of the document. 

    With oDoc 
     'Coding for Word 
    End With 

End Sub 

Public Function CreateWD(Optional bVisible As Boolean = True) As Object 

    Dim oTmpWD As Object 

    ''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    'Defer error trapping in case Word is not running. ' 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    On Error Resume Next 
    Set oTmpWD = GetObject(, "Word.Application") 

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    'If an error occurs then create an instance of Word. ' 
    'Reinstate error handling.       ' 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    If Err.Number <> 0 Then 
     Err.Clear 
     On Error GoTo ERROR_HANDLER 
     Set oTmpWD = CreateObject("Word.Application") 
    End If 

    oTmpWD.Visible = bVisible 
    Set CreateWD = oTmpWD 

    On Error GoTo 0 
    Exit Function 

ERROR_HANDLER: 
    Select Case Err.Number 

     Case Else 
      MsgBox "Error " & Err.Number & vbCr & _ 
       " (" & Err.Description & ") in procedure CreateWD." 
      Err.Clear 
    End Select 

End Function 
+0

Merci! Ça marche. J'en ai besoin légèrement changé. Aidez-moi, s'il vous plaît. Comment puis-je changer le code 'Set oDoc = oWD.Documents.Add' à Set oDoc' comme document actif car mon document word est déjà ouvert. Existe-t-il un moyen de contrôler ou d'accéder au titre du documentaire? –

+0

J'ai essayé d'utiliser 'Set oDoc = oWD.ActiveDocument'. il ne fonctionne pas pour le fichier qui est déjà ouvert et me donne l'erreur ** Cette commande n'est pas disponible parce qu'aucun document n'est ouvert. ** Cependant, quand j'ajoute un document en utilisant le code 'Set oDoc = oWD.Documents.Add', il puis détecte le document actif. –

+0

J'ai ajouté du code commenté pour montrer comment assigner 'oDoc'. –

0

Je poste ceci comme référence. C'est un code très similaire à celui que j'utilise pour ouvrir Outlook et qui reflète exactement votre intention, seulement cela le simplifie beaucoup plus.

'requires early binding (reference set for Microsoft Word Object Library) 
'first check if outlook is running and if not open it 
Dim wdApp As Word.Application 

On Error Resume Next 
Set wdApp = GetObject(, "Word.Application") 
On Error GoTo 0 
If wdApp Is Nothing Then Set wdApp = New Word.Application 

Je l'utilise depuis des années sans défaillance.