flx1990
Goto Top

Objektvariable oder With-Blockvariable nicht festgelegt

Hallo,

habe ein vba-Script was eine bearbeitete csv aus Excel an Word übergibt und daraus dann einen Serienbrief macht

Der Excel-Part (das automatisierte Bearbeiten der csv) läuft sauber durch, doch als es dann an die Übergabe an Word geht kommt folgender Fehler:

Objektvariable oder With-Blockvariable nicht festgelegt

Die Vorlagen-Worddatei wird noch sauber geöffnet, nur die Daten können nicht mehr eingelesen werden.

Hier der Code:

    sFile = "K:\XXX\Vorlagen_2003\TelefonverzeichnisXXX.doc"  
    Set WinWord = CreateObject("Word.Application")  
   
    With WinWord
        .Visible = True
        Application.Wait DateAdd("s", 1, Now())  
        .Documents.Open Filename:=sFile
        Application.Wait DateAdd("s", 1, Now())  
        '//WinWord.Documents.Open ("K:XXX\Vorlagen_2003\Telefonverzeichnis\XXX.doc")  
        With WinDoc
            With .MailMerge
                .OpenDataSource Name:=strDatenQuelle, LinkToSource:=True, Format:=0, SQLStatement:="SELECT * FROM `tp.csv$`"  
                .Destination = 0
                .SuppressBlankLines = True
                With .DataSource
                  .FirstRecord = wdDefaultFirstRecord
                  .LastRecord = wdDefaultLastRecord
                End With
                .Execute Pause:=False
                Set docSerienbrief = WinWord.ActiveDocument
                .DataSource.Close
                
                
            End With
        End With

        Set docSerienbrief = .Documents(1)
        WinDoc.Close False
        
    End With

In Zeile 11 steckt laut vba besagter Fehler.

Ich hatte das Makro vorher mit Office '03 im Einsatz, und da lief alles wunderbar.
Jetzt mit der 10er tritt der Fehler jedoch auf.

Ich hatte vorher einen anderen Fehler:
In Zeile 7 bekam ich den Fehler "Befehl misslungen".
Eine Pause mit Application.Wait DateAdd("s", 1, Now()) löste das Problem (zur Sicherheit dahinter direkt nochmal Eine...)

Nun ja, aber beim 2ten Fehler stecke ich fest.


Könnt ihr mir helfen?

Content-ID: 208746

Url: https://administrator.de/forum/objektvariable-oder-with-blockvariable-nicht-festgelegt-208746.html

Ausgedruckt am: 23.12.2024 um 17:12 Uhr

dog
dog 27.06.2013 um 11:21:10 Uhr
Goto Top
In Zeile 11 steckt laut vba besagter Fehler.

Da hat VBA auch völlig recht.
Wo soll die Variable auch herkommen?
colinardo
colinardo 27.06.2013 aktualisiert um 12:11:25 Uhr
Goto Top
Hallo Sibbel,

  1. das Objekt WinDoc existiert nicht. Zeile 7 sollte so lauten set WinDoc = .Documents.Open (Filename:=sFile)
  2. die 4-Fach verschachtelten With-Blöcke bergen Fehlerquellen.

Grüße Uwe
FLX1990
FLX1990 27.06.2013 um 11:49:31 Uhr
Goto Top
Ach nein...
keine Ahnung wieso da WinDoc stand und warum das funktioniert hat...

Naja ich habs mit WinWord ersetzt und bekomme immer noch einen Fehler in Zeile 11:
Objekt unterstützt diese Eingenschaft oder Methode nicht
colinardo
colinardo 27.06.2013 aktualisiert um 12:04:28 Uhr
Goto Top
das muss ja auch ein Objekt des Typs Document sein und nicht Application. mach das so wie ichs geschrieben habe
FLX1990
FLX1990 27.06.2013 um 12:09:48 Uhr
Goto Top
Zeile 7 sieht bei mir jetzt so aus:
set WinDoc = .Documents.Open Filename:=sFile

beim Ausführen bekomm ich jedoch die Meldung:
Fehler beim kompilieren: Erwartet: Anweisungsende
colinardo
colinardo 27.06.2013 um 12:12:00 Uhr
Goto Top
da fehlen noch die Klammern
set WinDoc = .Documents.Open (Filename:=sFile)
FLX1990
FLX1990 27.06.2013 um 12:42:48 Uhr
Goto Top
Ach so...

Gut das klappt schonmal,
leider habe ich wieder in zeile 11 ein "Objekt unterstützt diese Eingenschaft oder Methode nicht"...
colinardo
colinardo 27.06.2013 aktualisiert um 13:54:26 Uhr
Goto Top
Das Problem sind wie schon gesagt die verschachtelten WITH-Blöcke. Bei verschachtelten With-Blöcken gilt der Punkt immer für das Objekt des äußersten WITH-Blocks.
Versuch es erst mal damit:
sFile = "K:\XXX\Vorlagen_2003\TelefonverzeichnisXXX.doc"  
Set WinWord = CreateObject("Word.Application")  
   
With WinWord
    .Visible = True
    Set WinDoc = .Documents.Open(FileName:=sFile)
    WinDoc.MailMerge.OpenDataSource Name:=strDatenQuelle, LinkToSource:=True, Format:=0, SQLStatement:="SELECT * FROM `tp.csv$`"  
    WinDoc.MailMerge.Destination = 0
    WinDoc.MailMerge.SuppressBlankLines = True
    WinDoc.MailMerge.DataSource.FirstRecord = wdDefaultFirstRecord
    WinDoc.MailMerge.DataSource.LastRecord = wdDefaultLastRecord
    WinDoc.MailMerge.Execute Pause:=False
    Set docSerienbrief = WinWord.ActiveDocument
    WinDoc.MailMerge.DataSource.Close
    WinDoc.Close False
    Set docSerienbrief = .Documents(1)
End With
FLX1990
FLX1990 27.06.2013 um 13:43:28 Uhr
Goto Top
Es wird immer dubioser,
Er sagt mir jetzt wieder in Zeile 6, dass der "befehl misslungen" sei...

Nur, einmal hat es funktioniert...
Jetzt jedoch nichtmehr

Alle Dokumente sind geschloßen etc.
Nichts ist durch einen Anderen gesperrt.
colinardo
colinardo 27.06.2013 aktualisiert um 13:55:51 Uhr
Goto Top
schau mal mit dem Taskmanager ob vielleicht noch offene WORD-Instanzen im Hintergrund vorhanden sind, und schieß diese ab.
Und tausche die Reihenfolge dieser Zeilen :
Set docSerienbrief = .Documents(1)
WinDoc.Close False
in
WinDoc.Close False
Set docSerienbrief = .Documents(1)
FLX1990
FLX1990 27.06.2013 um 15:55:29 Uhr
Goto Top
hat auch nur einmal, direkt beim Ändern --> Ausführen geklappt.
Danach der selbe Fehler...

Ich weiß nicht woran das liegt.
Habe aber aufgegeben :D

Die Verarbeitung mach ich jetzt über ein Makro in Excel, aber übergeben wird es als csv in iReport ...
Viel einfacher dort...


Tortzdem recht herzlichen Dank für eure und vor allem deine, colinardo, Hilfe.

Gruß, Sibbel