Datenbank-Fehler bei Excel-Makro zur Serienbrieferstellung

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von MoonHowler.

    Datenbank-Fehler bei Excel-Makro zur Serienbrieferstellung

    Hallo zusammen,

    Ich hatte schon 2020 eine Exceldatei mit Makro erstellt um insgesamt 5 Worddokumente (Serienbriefe mit Feldern) aufzurufen und aus einer weiteren Exfceldatei mit Daten zu befüllen.
    2020 hatte das auch prima geklappt, jetzt (2023 nach Update unserer Software) habe ich Probleme...

    Doc.MailMerge.OpenDataSource bewirkt bei mir folgends:
    - erzeugt im übergeordneten Verzeichnes eine "Test tmp.xls" (nicht .xlsx, scheint eine leere komprimierte XML-Excel-Datei zu sein)
    - findet die Datendatei "Daten.xlsx" nicht bzw. sucht im übergeordneten Verzeichnis
    - erkennt mögliche Daten (den Excel-Reiter) nur wenn man bei Datenquelle "Tabelle" UND "Systemtabelle" aktiviert
    - Der Serienbrief wird nicht ausgefüllt und das Makro bricht mit Fehler ab weil keine Datenquelle geöffnet werden konnte


    Visual Basic-Quellcode

    1. ...
    2. ordner = "E:\ZKM\Data\TEST\Test tmp"
    3. Datenbasis = "Daten.xlsx"
    4. VorlageZusatzVB = "Dokument.docx"
    5. Set WinWord = CreateObject("Word.Application")
    6. With WinWord
    7. .Visible = True
    8. Set WinDoc1 = .Documents.Open(Filename:=ordner & "\" & VorlageZusatzVB, ConfirmConversions:=True, ReadOnly:=False, AddToRecentFiles:=False, Visible:=IIf(DefineAction = "DEBUG", True, False), Revert:=False, XMLTransform:="")
    9. End With
    10. With WinDoc1.MailMerge
    11. .MainDocumentType = wdFormLetters
    12. .OpenDataSource Name:=ordner & "\" & Datenbasis, _
    13. ConfirmConversions:=True, _
    14. ReadOnly:=False, Revert:=False, _
    15. LinkToSource:=True, _
    16. AddToRecentFiles:=False, _
    17. Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & ordner & "\" & Datenbasis & ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OLEDB:Dat", _
    18. SQLStatement:="SELECT * FROM `'Daten-Basis$'` WHERE `VBNR` IS NOT NULL", SQLStatement1:="", SubType:=wdMergeSubTypeAccess
    19. .DataSource.ActiveRecord = -4 'wdFirstRecord
    20. .Destination = 0 'wdSendToNewDocument
    21. .SuppressBlankLines = True
    22. End With
    23. ...


    2020 hieß der Jet-Teil im Connection-Befehl noch "Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OLE".
    Auch das Eintragen/Ersetzen von ", SubType:=wdMergeSubTypeWord2000" beim SQLStatment hatte nichts geholfen. Fehler blieben unverändert.

    Kann mir jemand das Problem erklären bzw. lösen?

    schon mal vielen Dank im Voraus für etwaige Hilfe

    Schönen Gruß
    Moonhowler
    In welcher Zeile kommt der Fehler? Wie ist die genaue Fehlermeldung?

    Wenn ich bei mir den MailMerge für XLSX-Dateien anschaue, sieht das so aus:

    Visual Basic-Quellcode

    1. .MailMerge.OpenDataSource Name:= DateiName, _
    2. ,ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
    3. AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
    4. WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
    5. Format:=wdOpenFormatAuto, _
    6. Connection:= _
    7. "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & DateiName &";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet ", _
    8. SQLStatement:="SELECT * FROM `'Formularantworten 1$'`", _
    9. SQLStatement1:="", _
    10. SubType:=wdMergeSubTypeAccess
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Hallo,

    erst einmal Danke für die Rückmeldung.

    Im Makro tritt der Fehler bei dem .OpenDataSource-Befehl in Zeile 16 (bis 22 inklusive, da 1 Befehl) auf. Dort bricht alles ab.

    Word ist geöffnet und lässt ein Fehlermeldungsfenster erscheinen mit dem Titel "Tabelle wählen", einer leeren Auswahl und im Feld "Arbeitsmappe" erscheint ein Dateipfad zu einer .xlsx, die ich nicht kenne und die ich nicht im Makro oder in den Programmen verwendet habe (jedenfalls nicht in den letzten Monaten an die ich mich erinnere).

    Wenn ich hier abbreche, weil ich die gewünschte Datei einfach nicht auswählen kann (da in einem nicht vorgeschlagenen Verzeichnis), erscheint in Excel die Fehlermeldung "Laufzeitfehler 4198, Befehl misslungen" (was unter den Umständen zu erwarten ist.

    Wenn ich jetzt im darüberliegenden Verzeichnis nachschaue, liegt dort plötzlich die angesprochene .xls-Datei mit dem Namen des angesprochenen Verzeichnisses (Test tmp.xls).

    Ich werde am Wochenende mal die vorgeschlagenen Connection-Angaben versuchen, Danke.

    Schönen Gruß
    Moonhowler

    MoonHowler schrieb:

    Wenn ich jetzt im darüberliegenden Verzeichnis nachschaue, liegt dort plötzlich die angesprochene .xls-Datei mit dem Namen des angesprochenen Verzeichnisses (Test tmp.xls)

    Also in "TEST" liegt "test tmp.xls" nach dem Fehler? Das sieht ja eher danach aus, als hat er ein Problem mit deinem Dateipfad.
    Hast du mal mit der Benamung rumgespielt? Tippfehler im Dateinamen? Fehlen vielleicht Zugriffsberechtigungen bei Daten.xlsx?
    Vereinfache doch schonmal direkt zu FilePath = "E:\ZKM\Data\TEST\Test tmp\Daten.xlsx"
    Oder hat VBA ein Problem mit Leerzeichen im Dateipfad?
    Versuch auch mal FilePath = "E:\ZKM\Data\TEST\""Test tmp""\Daten.xlsx"

    Danke für den Hilfeversuch.

    Es gab kein Problem mit dem Dateipfad, alles Änderungsversuche führten zum gleichen Ergebnis.
    Auch die Namen der Dateien spielten scheinbar keine Rolle (Leerzeichen waren auch kein Problem).
    Zugriffsberechtigungen bestanden alle (nachgeprüft).

    Nach etlichen Versuchen führte folgende Kombination zum Erfolg:
    1.) - Änderung des Dateinamens der Datendatei von Daten.xlsx zu Daten.xls (ohne Umformatierung !)
    2.) - Änderung des OpenDataSource-Befehls zu :
    .OpenDataSource Name:="E:\ZKM\Data\TEST\Test tmp\Daten.xls", Connection:="Daten-Basis", SubType:=wdMergeSubTypeWord2000
    das ist tatsächlich dann die ganze Zeile...!

    muss ich das verstehen?

    Trotdem herzlichen Dank für Eure Bemühungen.

    schönen Gruß
    MoonHowler


    PS: Format:=wdOpenFormatAuto scheitert mit "Befehl mißlungen"

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MoonHowler“ ()