Laufzeitfehler’58‘

Wie der Fehlername andeutet, tritt dieser Fehler auf, wenn auf eine bestimmte Datei verwiesen wird und der Dateiname bereits im selben Pfad oder Ordner vorhanden ist. In diesem Artikel behandeln wir die möglichen Gründe für das Auftreten dieses Fehlers und wie der Fehler behoben werden kann.

Dies sind die möglichen Ursachen des Fehlers:

  • Der Dateiname, den Sie in der Name-Anweisung angegeben haben, ist identisch mit einem bereits vorhandenen Dateinamen.

Was verursacht den Fehler?

Bevor Sie mit der Behebung des Fehlers fortfahren, müssen Sie die Fehlerursache in Ihrem VBA-Code identifizieren. Die Codezeile, die den Fehler verursacht, wird gelb hervorgehoben, sobald die Debug-Schaltfläche gedrückt wird.

Ursache 1: Der angegebene Name in der Name-Anweisung existiert bereits

In diesem Beispiel versuchen wir, die Datei „Code.xlsx“ mithilfe der Name-Anweisung in „Country Code.xlsx“ umzubenennen.

Option Explicit

Sub FileExist_Example1()
    Dim altDateiname, nueDateiname As String

    altDateiname = "C:\Users\darlene\Documents\Code.xlsx"
    nueDateiname = "C:\Users\darlene\Documents\Country Code.xlsx"

    Name altDateiname As nueDateiname
End Sub

Es tritt kein Fehler auf, wenn keine .xlsx-Datei mit dem Dateinamen „Country Code“ im Ordner „Documents“ vorhanden ist. Wenn es jedoch vorhanden ist, wird dieser Fehler auftreten.

Um diesen Fehler zu vermeiden, überprüfen Sie am besten immer, ob die Datei bereits im angegebenen Pfad oder Ordner vorhanden ist.

Wir haben drei Musterlösungen.

Lösung 1:

Um den Fehler zu beheben, müssen Sie in der Name-Anweisung einen neuen Dateinamen angeben. Durch Verketten einer eindeutigen Zeichenfolge mit dem neuen Dateinamen.

Im folgenden Beispielcode ist die verkettete Zeichenfolge der Zeitstempel, wenn der neue Dateiname generiert wird.

Option Explicit

Sub FileExist_ExampleS1()
    Dim altDateiname, nueDateiname As String
    Dim i As Date
    i = Now
    altDateiname = "C:\Users\darlene\Documents\Code.xlsx"
    nueDateiname = "C:\Users\darlene\Documents\" & Format(i, "DD.MM.YYYY hhmmss") & " Country Code.xlsx "

    Name altDateiname As nueDateiname
End Sub

Lösung 2:

Um die Mühe zu vermeiden, manuell zu prüfen, ob die Datei vorhanden ist, ist es immer am besten, einen Code hinzuzufügen, der prüft, ob die Datei bereits im angegebenen Pfad oder Ordner vorhanden ist. Anstatt eine Fehlermeldung zu erhalten, werden Sie über den im Ordner vorhandenen Dateinamen informiert.

Option Explicit

Sub FileExist_Example1()
    Dim altDateiname, nueDateiname As String
    Dim strFileExists As String
    
    altDateiname = "C:\Users\darlene\Documents\Code.xlsx"
    nueDateiname = "C:\Users\darlene\Documents\Country Code.xlsx"
    
    strFileExists = Dir(nueDateiname)

    If strFileExists = "" Then
        Name altDateiname As nueDateiname
    Else
        MsgBox "The file already exist."
    End If
    
End Sub

Lösung 3:

Eine andere Lösung besteht darin, die alte Datei zu löschen, bevor Sie sie in einer Name-Anweisung angeben.

Option Explicit

Sub FileExist_Example1()
    Dim altDateiname, nueDateiname As String
    Dim strFileExists As String
    
    altDateiname = "C:\Users\darlene\Documents\Code.xlsx"
    nueDateiname = "C:\Users\darlene\Documents\Country Code.xlsx"
    
    'Checks if the file is already existing.
    strFileExists = Dir(nueDateiname)
    
    If strFileExists <> "" Then
        Kill nueDateiname
    End If
    
    Name altDateiname As nueDateiname
End Sub

Benötigen Sie einen VBA Programmierer?

Wir als exact construct programmieren mit einem Team von rd. 20 Mitarbeitern seit über 10 Jahren Excel-Tools. Wir sind ein Nischenanbieter der spezialisiert auf Makros/VBA-Codes ist. Daneben unterstützen wir auch als 3rd Level Support die IT-Abteilungen rund um Probleme bei MS Office (Excel, Word, PowerPoint, etc.).

Haben Sie ein Excel-Problem? Benötigen Sie einen Makro-Programmierer? Rufen Sie uns unverbindlich an +41 52 511 05 25 oder kontaktieren Sie uns via Kontaktformular.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.