Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 4198 Befehl misslungen

4198 Befehl misslungen
27.06.2016 21:08:58
Ben
Hallo, dass folgende VBA-Skript liefer leider einen Fehler.
Ich benutze Word und Excel in der Version 2013. Ich bin über jede Hilfe dankbar.
Public Sub Serienbriefdruck()
Debug.Print "#### Starte Serienbriefdruck!"
On Error GoTo ErrHandler
Dim from As String
Dim tabelle As String
Dim wdApp As Object
Dim dok As Object
Dim name As String
tabelle = ActiveWorkbook.name
'Serienbrief drucken
'Word öffnen
Set wdApp = CreateObject("Word.Application")
'TODO auf False setzen, damit Erstellung im Hintergrund läuft
wdApp.Visible = True
'wdApp.ScreenUpdating = False
'wdApp.DisplayAlerts = False
pfad = Application.ActiveWorkbook.Path & "\"
datei = "Zuweisungen Zeugniskonferenz.docm"
Debug.Print pfad & datei
'Serienbrief öffnen
'MsgBox pfadSerienbrief & serienbrief
Set dok = wdApp.Documents.Open(pfad & datei)
dok.MailMerge.MainDocumentType = 0
dok.MailMerge.MainDocumentType = wdFormLetters
'Serienbrief aufrufen
src = pfad & ActiveWorkbook.name
Debug.Print src
For Each ws In ActiveWorkbook.Worksheets
If ws.name  "Vorbereitung" Then
ws.Activate
ActiveSheet.Range("B2").Value = ws.name
Debug.Print ws.name
from = "`" & ws.name & "$" & "`"
' HIER TRITT DER FEHLER AUF...
'dok.MailMerge.OpenDataSource name:=src, _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=src;Mode=Read;Extended  _
Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global" _
, SQLStatement:="SELECT * FROM " & from, SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess
dok.MailMerge.ViewMailMergeFieldCodes = False
'Serienbrief in eine neue Worddatei ausgeben
' With dok.MailMerge
'   .Destination = wdSendToNewDocument
'   .SuppressBlankLines = True
'End With
'wdApp.Run "DeleteEmptyRows()"
wdApp.ActiveDocument.ExportAsFixedFormat OutputFileName:= _
pfad & "Zuteilung " & ActiveWorkbook.ActiveSheet.name, _
ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=False, _
OptimizeFor:=wdExportOptimizeForPrint, _
Range:=wdExportAllDocument, from:=beginnDS, To:=endeDS, _
Item:=wdExportDocumentContent, _
IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, _
DocStructureTags:=True, BitmapMissingFonts:=True, _
UseISO19005_1:=True
wdApp.ActiveDocument.Close savechanges:=False 'erzeugte Worddatei schliessen?
'wdApp.ScreenUpdating = False
'wdApp.DisplayAlerts = False
End If
Next ws
wdApp.Quit wdDoNotSaveChanges
Set dok = Nothing
Set wdApp = Nothing
Debug.Print "#### Serienbriefdruck abgeschlossen!"
Exit Sub
'Fehlerbehandlung
ErrHandler:
If Err.Number  0 Then
MsgBox "Fehler bei " & _
blatt & vbCrLf & _
CStr(Err.Number) & " " & Err.Description, vbExclamation + vbOKOnly
Debug.Print vbCrLf & CStr(Err.Number) & " " & Err.Description
End If
wdApp.Quit wdDoNotSaveChanges
Set dok = Nothing
Set wdApp = Nothing
End Sub

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 4711 Analyse misslungen
28.06.2016 09:18:11
EtoPHG
Hallo Ben,
Du mutest den Helfern etwas zuviel zu, denn in einem nicht kompilierbaren VBA-Code Fehler zu suchen, ist wie Stochern im Nebel. Keiner wird wohl deine Applikation nachbauen. Zur Fehlerbeschreibung " liefer leider einen Fehler." hab ich nirgends im World-Wide-Web Hilfreiches gefunden. Und Du?
Gruess Hansueli
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler 4198 in VBA beheben


Schritt-für-Schritt-Anleitung

Um den Laufzeitfehler 4198 in Deinem VBA-Skript zu beheben, folge diesen Schritten:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Fehlercode identifizieren: Suche die Zeile, in der der Fehler auftritt. Im Beispielscript ist dies die Zeile mit dok.MailMerge.OpenDataSource.
  3. Überprüfen des Quellpfads: Stelle sicher, dass der src-Pfad korrekt ist und auf eine gültige Datenquelle verweist.
    src = pfad & ActiveWorkbook.name
  4. Datenbankverbindung überprüfen: Achte darauf, dass die Verbindungszeichenfolge korrekt ist und alle erforderlichen Parameter (wie User ID und Data Source) enthält.
  5. Dokumente schließen: Wenn Du einen Laufzeitfehler erhältst, stelle sicher, dass alle Word-Dokumente ordnungsgemäß geschlossen werden.
  6. Fehlerbehandlung implementieren: Stelle sicher, dass Deine Fehlerbehandlung korrekt konfiguriert ist, um spezifische Fehlermeldungen anzuzeigen.

Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 4198: Dieser Fehler tritt häufig auf, wenn die Datenquelle nicht korrekt angegeben wurde. Überprüfe, ob das Dokument, auf das Du zugreifst, existiert und das Format unterstützt wird.

  • Lösung: Stelle sicher, dass der Pfad zur Datei korrekt ist und dass die Datei nicht beschädigt ist.

  • Fehler: Dokument kann nicht geöffnet werden: Dies kann passieren, wenn das Dokument in einem anderen Programm geöffnet ist oder Du nicht die richtigen Berechtigungen hast.

  • Lösung: Schließe alle Instanzen von Word und stelle sicher, dass Du die nötigen Berechtigungen besitzt.


Alternative Methoden

Falls die oben genannten Schritte nicht zur Behebung des Laufzeitfehlers 4198 führen, kannst Du auch folgende alternative Methoden ausprobieren:

  • Manuelles Öffnen des Dokuments: Öffne das Word-Dokument manuell und überprüfe, ob es Fehler aufweist.
  • Verwendung von ADO: Anstelle von MailMerge kannst Du auch ADO verwenden, um Daten in Word zu importieren.
  • VBA-Debugging: Nutze die Debugging-Tools im VBA-Editor, um Deinen Code schrittweise durchzugehen. Dies kann helfen, den genauen Punkt zu identifizieren, an dem der Fehler auftritt.

Praktische Beispiele

Hier ist ein einfaches Beispiel zur Verwendung von MailMerge mit einer gültigen Datenquelle:

Sub BeispielSerienbrief()
    Dim wdApp As Object
    Dim dok As Object
    Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = True
    Set dok = wdApp.Documents.Open("C:\Pfad\zu\deinem\Dokument.docx")

    dok.MailMerge.OpenDataSource Name:="C:\Pfad\zu\deiner\Datenquelle.xlsx", _
    SQLStatement:="SELECT * FROM [Tabelle1$]"

    dok.MailMerge.Execute
    wdApp.Quit
End Sub

Achte darauf, dass Du den Pfad und die Namen der Dateien an Deine Gegebenheiten anpasst.


Tipps für Profis

  • Verwende Option Explicit: Füge am Anfang Deines VBA-Codes Option Explicit hinzu, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden.

  • Debugging-Tools nutzen: Nutze Debug.Print, um Werte während der Ausführung zu überprüfen. So kannst Du leichter nachvollziehen, wo der Fehler auftritt.

  • Fehlerbehandlung verbessern: Erweitere die Fehlerbehandlung, um spezifischere Fehlermeldungen auszugeben, die Dir helfen können, das Problem schneller zu identifizieren.


FAQ: Häufige Fragen

1. Was bedeutet der Laufzeitfehler 4198?
Der Laufzeitfehler 4198 tritt auf, wenn ein Befehl nicht erfolgreich ausgeführt werden kann, häufig aufgrund eines Problems mit der Datenquelle oder der Verbindung.

2. Wie kann ich sicherstellen, dass meine Datenquelle korrekt ist?
Überprüfe den Pfad zur Datenquelle und stelle sicher, dass die Datei existiert und im richtigen Format vorliegt. Auch die Berechtigungen sollten stimmen.

3. Was kann ich tun, wenn der Fehler weiterhin auftritt?
Wenn der Fehler weiterhin auftritt, überprüfe den Code Schritt für Schritt im Debugging-Modus und teste verschiedene Ansätze, um die MailMerge-Funktion zu verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige