Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1668to1672
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Error 76 - MkDir

Error 76 - MkDir
15.01.2019 10:48:35
Chris
Liebe VBA-Experten,
ich habe seit ein paar Tagen ein kleines Problem und zwar:
ich möchte mit Hilfe von VBA einen Sereienbrief in einzelne PDF's umwandeln und in einem Zielordner speichern, die PDF sollen nach dem Seriendruckfeld Kontoname und EMail banannt werden. Das funktioniert auch, allerdings nur bei den ersten 60 Serienbriefen (insgesamt ca. 450), dannach bekomme ich den Error 76 "path not found".
Hat von euch jemand einen Vorschlag wie ich dieses Problem behandeln kann?

Private Sub CommandButton1_Click()
Dim iBrief As Integer, sBrief As String
Dim AppShell As Object
Dim BrowseDir As Variant
Dim Path As String
On Error GoTo ErrorHandling
ActiveDocument.Activate
Set AppShell = CreateObject("Shell.Application")
Set BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)
If BrowseDir = "Desktop" Then
Path = CreateObject("WScript.Shell").SpecialFolders("Desktop")
Else
Path = BrowseDir.items().Item().Path
End If
If Path = "" Then GoTo ErrorHandling
Path = Path & "\Serienbrief-" & Format(Now, "dd.mm.yyyy-hh.mm.ss") & "\"
MkDir Trim(Path) 'Hier kommt die Fehlermeldung nach dem 60 Brief
On Error GoTo ErrorHandling
MsgBox "Serienbriefe werden exportiert. Dieser Vorganag kann einige Minuten dauern",  _
vbOKOnly + vbInformation
Application.Visible = False
With ActiveDocument.MailMerge
.DataSource.ActiveRecord = 1
Do
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
sBrief = Path & .DataFields("Kontoname").Value & "_" & .DataFields("EMail"). _
Value & "_" & ".pdf"
End With
.Execute Pause:=False
If .DataSource.DataFields("Kontoname").Value > "" Then
ActiveDocument.SaveAs Filename:=sBrief, FileFormat:=wdFormatPDF
End If
ActiveDocument.Close False
If .DataSource.ActiveRecord  0 Then
MsgBox "Unbekannter Fehler: " & Err.Number & " - Bitte Makro erneut ausführen.",  _
vbOKOnly + vbCritical
Else
MsgBox "Serienbriefe erfolgreich exportiert", vbOKOnly + vbInformation
End If
End Sub


Vielen Dank schonmal im Voraus!

29
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Error 76 - MkDir
15.01.2019 10:58:11
Daniel
Hi
welchen Wert hat dann den Path wenn der Fehler auftritt?
noch ne Idee zum Pfadnamen:
Punkte sind mittlerweile schon zulässig, trotzdem würde ich diese nicht verwenden damit der Punkt das eindeutige Kennzeichen für den Beginn der Dateierweiterung bleibt.
Außerdem solltest du die Anordnung Jahr-Monat-Tag verwenden, damit stimmt die Sortierung auch wenn du nach Namen sortierst.
dh ich würde Format(Now, "YYYY-MM-DD_hhmmss") bevorzugen.
Gruß Daniel
AW: Error 76 - MkDir
15.01.2019 11:36:38
Chris
Hallo Daniel,
jetzt ist gerade etwas komisches passiert. Als ich den Pfad des Fehlers sehen wollte hat sich der Fehler verändert. Jetzt kommt die Fehlermeldung: Error 4198 Command Failed
Achja und der Pfad der bei dem Fehler kommt ist der Richtige also:
"C:\xxx\xxx\Desktop\Serienbrief-15.01.2019-11.29.28\"
Danke!
Anzeige
AW: Error 76 - MkDir
15.01.2019 12:25:11
UweD
Versuch doch mal genau diesen Ordner händisch über dateiexplorer anzulegen.
Klappt das?
AW: Error 76 - MkDir
15.01.2019 12:50:32
Chris
Hallo,
ja das habe ich schon einmal probiert, aber auch hier hat MkDir den Pfad nach 60 Serienriefe verloren.
LG
Chris
AW: Error 76 - MkDir
15.01.2019 12:55:05
UweD
Was kommt denn bei der händischen Eingab dann für ein Fehler?
AW: Error 76 - MkDir
15.01.2019 13:05:08
Chris
Wenn ich dem strNeu einen Pfad zuweise, dann kommt der Laufzeitfehler 75.
AW: Error 76 - MkDir
15.01.2019 13:16:37
UweD
NEIN, nicht per VBA
sondern
im Explorer mal in das Verzeichnis wechseln und dort dann
- Neuer Ordner
- den dann so benenen wie der Pfadname ist, bei dem das Makro aussteigt.
AW: Error 76 - MkDir
15.01.2019 13:23:41
Chris
Es passiert genau das gleiche wie wenn ich einen Ordner erstellen lasse.
Der Code wird ausgeführt und es funktioniert aber nur bei den ersten 60 Briefen, dannach kommt wieder die Fehlermeldung 4198.
Anzeige
AW: Error 76 - MkDir
15.01.2019 13:30:34
UweD
Also ich breche jetzt hier ab.
Es werden 59 Verzeichnisse erstellt. OK
Alles so lassen
dann sollst du das 60. mal händisch anlegen ohne VBA
LG UweD
AW: Error 76 - MkDir
15.01.2019 13:38:42
Chris
Oke danke trotzdem UweD.
LG
Chris
AW: Error 76 - MkDir
15.01.2019 13:42:18
UweD
versuch mal noch
Ist das Netzlaufwerk?
anstelle backslash \ den normalen Schrägstrich / zu nehmen
ausserdem wir der hintere \ nicht benötigt
=strPath & "/Serienbrief-" & Format(Now, "dd-mm-yyyy-hh_mm_ss")

AW: Error 76 - MkDir
15.01.2019 13:56:00
Chris
Hallo,
nein funktioniert leider auch nicht!
LG
Chris
AW: Error 76 - MkDir
15.01.2019 11:46:29
UweD
Hallo
  • 1) ich denke, dass zu diesem Zeitpunkt bereits ein Verzeichnis mit gleichem Namen existiert.
  • 2) Auch solltes du keine Variablennamen verwenden, die auch Teile der Syntax sind.
    &nbsp&nbsp&nbsp&nbspalso Anstelle von Path besser strPath oder Pfad
  • 3) das mit den Punkten wurde ja schon gesagt
    zu 1) könntest du vorher prüfen, ob das Verz schon da ist, eine sec warten und zurückspringen
    so in Etwa
    Private Sub CommandButton1_Click()
    
        Dim iBrief As Integer, sBrief As String
        Dim AppShell As Object
        Dim BrowseDir As Variant
        Dim strPath As String
        Dim strNeu As String
    
        On Error GoTo ErrorHandling
    
        ActiveDocument.Activate
    
        Set AppShell = CreateObject("Shell.Application")
        Set BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)
    
        If BrowseDir = "Desktop" Then
            strPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
        Else
            strPath = BrowseDir.items().Item().Path
    
        End If
    
        If strPath = "" Then GoTo ErrorHandling
    
    erneut:
        strNeu = strPath & "\Serienbrief-" & Format(Now, "dd-mm-yyyy-hh_mm_ss") & "\"
        
        If Dir(strNeu, vbDirectory) <> "" Then
            'MsgBox "Verzeichnis exitsiert bereits: " & vbLf & vbLf & strNeu 
            Application.Wait Now + TimeValue("00:00:01") 'warten eine Sekunde 
            GoTo erneut
        End If
        
        MkDir Trim(strNeu) 'Hier kommt die Fehlermeldung nach dem 60 Brief 
        
       
        On Error GoTo ErrorHandling
        '..... 
    

    LG UweD
  • Anzeige
    AW: Error 76 - MkDir
    15.01.2019 12:00:37
    Chris
    Hallo UweD,
    vielen Dank für deine Hilfe, ich habe es jetzt mal so versucht, aber dieses mal werden nur 44 Seriebreife bearbeitet, bis die Meldung kommt und der angelegte Ordner, wo die Serienbreife gespeichert werden sollten, bleibt leer.
    LG
    Chris
    Festplatte voll?
    15.01.2019 12:04:33
    UweD
    AW: Festplatte voll?
    15.01.2019 12:15:30
    Chris
    Hi UweD,
    nein es sind noch über 300GB frei.
    Danke und LG
    AW: Festplatte voll?
    15.01.2019 12:26:37
    PeterK
    Hallo
    Nimm mal ALLE "on error goto" raus und benutze den Debugger
    AW: Festplatte voll?
    15.01.2019 12:58:09
    Chris
    Hi,
    danke für den Tipp. Ich habe es gerade ausprobiert und bei folgender Zeile:

    ActiveDocument.SaveAs Filename:=sBrief, FileFormat:=wdFormatPDF

    kommt die Fehlermeldung 4198. Der Name unter dem es gespeichert ist sollte jedoch stimmen "Kontoname_EMail_.pdf"
    LG
    Chris
    Anzeige
    AW: Festplatte voll?
    15.01.2019 13:54:16
    PeterK
    Hallo
    Kannst Du das Word-File mal bereitstellen?
    AW: Festplatte voll?
    15.01.2019 14:06:46
    Chris
    Hallo PeterK,
    nein Leider nicht! :(
    LG
    Chris
    AW: Festplatte voll?
    15.01.2019 14:33:15
    PeterK
    Hallo
    Im Stackoverflow Forum hab ich folgendes gefunden:
    
    I found a few problems in your code The lines
    .DataSource.ActiveRecord = 1
    And
    If .DataSource.ActiveRecord 
    
    The correct code looks like this
    With ActiveDocument.MailMerge
    .DataSource.ActiveRecord = wdLastRecord
    LastRecord = .DataSource.ActiveRecord
    .DataSource.ActiveRecord = wdFirstRecord
    Do
    .Destination = wdSendToNewDocument
    .SuppressBlankLines = True
    With .DataSource
    .FirstRecord = .ActiveRecord
    .LastRecord = .ActiveRecord
    sBrief = Path & .DataFields("employeenr").Value & "_" & Data & ".pdf"
    End With
    .Execute Pause:=False
    If .DataSource.DataFields("employeenr").Value > "" Then
    ActiveDocument.SaveAs FileName:=sBrief, FileFormat:=wdFormatPDF
    End If
    ActiveDocument.Close False
    If .DataSource.ActiveRecord 

    Anzeige
    AW: Festplatte voll?
    15.01.2019 15:00:05
    Chris
    Hallo PeterK,
    ich habe den Code jetzt abgeändert:

    With ActiveDocument.MailMerge
    .DataSource.ActiveRecord = wdLastRecord '1
    LastRecord = .DataSource.ActiveRecord
    .DataSource.ActiveRecord = wdFirstRecord
    Do
    .Destination = wdSendToNewDocument
    .SuppressBlankLines = True
    With .DataSource
    .FirstRecord = .ActiveRecord
    .LastRecord = .ActiveRecord
    sBrief = Path & .DataFields("Kontoname").Value & "_" & .DataFields("EMail").Value & "_" & ".pdf" 'Unter was soll es gespeichert werden
    End With
    .Execute Pause:=False
    If .DataSource.DataFields("Kontoname").Value > "" Then 'Unter was soll es gespeichert werden
    ActiveDocument.SaveAs Filename:=sBrief, FileFormat:=wdFormatPDF
    End If
    ActiveDocument.Close False
    If .DataSource.ActiveRecord .DataSource.ActiveRecord = wdNextRecord
    Else
    Exit Do
    End If
    Loop
    End With

    Hat leider nichts gebracht, es kommt immer noch die Fehlermeldung nach dem 60 Serienbrief.
    LG und Danke!
    Anzeige
    AW: Festplatte voll?
    15.01.2019 15:26:38
    PeterK
    Hallo
    Kannst Du einmal probieren die Zeile mit "SaveAs" auszukommentieren und die Anzahl der Briefe ermitteln?
    AW: Festplatte voll?
    15.01.2019 15:58:37
    Chris
    Hi PeterK,
    Soll ich einfach die ganze If-Bedingung auskommentieren?
    LG
    Chris
    PS.: Es sind 463 Briefe
    AW: Festplatte voll?
    15.01.2019 16:02:16
    PeterK
    Hallo
    Ja, probier mal. Du musst aber noch einen Zähler einfügen, sonst weisst Du nicht wie oft die Schleife durchlaufen wurde.
    AW: Festplatte voll?
    15.01.2019 16:11:47
    Chris
    Hallo PeterK,
    ja jetzt werden alle Briefe durchlaufen aber die Briefe werden nicht im Ordner abgelegt.
    Wenn ich nur die If Bedingung auskommentiere und die ....saveAs stehen lasse, dann werden wieder nur die ersten 60 Briefe durchlaufen.
    LG
    Anzeige
    AW: Festplatte voll?
    15.01.2019 16:31:32
    PeterK
    Hallo
    Ich vermute ein Sonderzeichen im Kontonamen
    Fug folgende Funktion ein:
    
    Public Function CleanFilename(ByVal sFilename As String, _
    Optional ByVal sChar As String = "") As String
    Dim regex As Object
    Set regex = CreateObject("vbscript.regexp")
    regex.Global = True
    regex.Pattern = "[\\/:?*^""|]"
    ' alle nicht zulässigen Zeichen ersetzen
    CleanFilename = regex.Replace(sFilename, sChar)
    Set regex = Nothing
    End Function
    
    und füge folgende Zeilevor dem SaveAs Command ein
    
    'Ersetzt alle Sonderzeichen durch "_"
    sBrief= CleanFilename(sBrief,"_")
    

    Anzeige
    AW: Festplatte voll?
    15.01.2019 16:38:11
    Chris
    Hallo nochmal,
    vielen Dank PeterK, jetzt funktioniert alles.
    Schönen Tag noch!
    LG
    Chris
    Danke für die Rückmeldung (owT)
    15.01.2019 16:41:39
    PeterK

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige