2016-08-10 5 views
-3

Ich konnte erfolgreich (mit so viel Hilfe von einem Stack-Exchange-Benutzer) ein Makro zum automatischen Seriendruck eines Word-Dokuments von Excel. Aber das Problem ist jetzt, wenn das Wort Dokument nicht geöffnet ist, bekomme ich einen Automatisierungsfehler.Jede andere Methode, um "Automatisierungsfehler" zu lösen

Im Moment löse ich es, indem ich das Word-Dokument jedes Mal öffne, aber ich bezweifle, dass das die richtige Programmiermethode ist.

Irgendwelche Vorschläge, um diesen Fehler zu beheben? Ich bin sehr neu in VBA. Dies ist Teil meiner Studentenaufgaben. Irgendwelche Ratschläge oder Codeänderungen, um diesen Fehler zu beheben? Ich habe die offiziellen msdn docs gelesen, habe nichts verstanden. '(

Der Fehler ist in der Regel ‚Automatisierungsfehler - mit einem Kreuzzeichen‘ oder diesem:: http://imgur.com/a/zitah Für beide diese Fehler Lösung bisher war zunächst das Word-Dokument zu öffnen und dann Makro ausführen

.

Update: ich entfernte "auf Fehler ..." Teil und jetzt der Fehler ist dies: http://imgur.com/a/epmGR

das Programm ist wie folgt:

Const wdFormLetters = 0, wdOpenFormatAuto = 0 
Const wdSendToNewDocument = 0, wdDefaultFirstRecord = 1, wdDefaultLastRecord = -16 

Sub RunMerge2() 
Dim wd As Object, wdocSource As Object 
    Dim sh As Worksheet 
    Dim Lrow As Long, i As Long 
    Dim cdir As String, client As String, newname As String 
    Dim sSQL As String 

    cdir = "C:\Users\Kamlesh\Desktop\" 

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

    Set wdocSource = wd.Documents.Open(cdir & "\master\installers.docx") 
    Set sh = ActiveSheet 
    strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name 

    With sh 
     Lrow = .Range("A" & .Rows.Count).End(xlUp).Row 

     For i = 2 To Lrow 
      If Len(Trim(.Range("A" & i).Value)) <> 0 Then 
       client = .Cells(i, 1).Value 
       newname = "Installer Instructions - " & client & ".docx" 

       wdocSource.MailMerge.MainDocumentType = wdFormLetters 

       '~~> Sample String 
       sSQL = "SELECT * FROM `Sheet1$` WHERE [Client Name] = '" & .Range("A" & i).Value & "'" 

       wdocSource.MailMerge.OpenDataSource Name:=strWorkbookName, _ 
       AddToRecentFiles:=False, Revert:=False, Format:=wdOpenFormatAuto, _ 
       Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _ 
       SQLStatement:=sSQL 

       With wdocSource.MailMerge 
        .Destination = wdSendToNewDocument 
        .SuppressBlankLines = True 
        With .DataSource 
         .FirstRecord = wdDefaultFirstRecord 
         .LastRecord = wdDefaultLastRecord 
        End With 
        .Execute Pause:=False 
       End With 

       wd.ActiveDocument.SaveAs cdir & newname 
       wd.ActiveDocument.Close SaveChanges:=False 
      End If 
     Next i 
    End With 

    wdocSource.Close SaveChanges:=False 
    'wd.Quit 

    Set wdocSource = Nothing 
    Set wd = Nothing 
End Sub 
+0

Überprüfen Sie mein Update, um herauszufinden, wo der Fehler liegt. – Slai

Antwort

0

diese Linie

Set wdocSource = wd.Documents.Open(cdir & "\master\installers.docx") 

Set wdocSource = wd.Documents.Open(cdir & "master\installers.docx") 

und

strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name 

mit

strWorkbookName = ThisWorkbook.FullName 

ersetzt werden sollte, Um 363.210

zu finden, welcher Teil des Codes verursacht den Fehler, in Extras> Optionen> Registerkarte Editor alles überprüfen

und in der Registerkarte Allgemein alles überprüfen und wählen Break in Class Module

+0

Der vorhandene Code (der Teil, den Sie ersetzen möchten) ist erforderlich, um den Fall zu verarbeiten, in dem Word bereits ausgeführt wird. (Und Antworten vorschlagen nicht * versuch * etwas. Ein Vorschlag sollte als Kommentar zu der Frage geschrieben werden. –

+0

sowieso, ich habe diesen Teil entfernt und Screenshot veröffentlicht. Hoffe, das hilft, das Problem zu debuggen. –

+0

@Ken White, das ist genau Warum ich es vorgeschlagen habe, falls das Problem mit der bereits laufenden Word-Instanz auftrat – Slai

Verwandte Themen