Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Systemfehler &H80004005 (-2147467259) | Herbers Excel-Forum

Forumthread: Systemfehler &H80004005 (-2147467259)

Systemfehler &H80004005 (-2147467259)
04.02.2010 22:35:16
alex

Hallo.
Heute früh hatte ich in meiner Excel Datei folgenden Fehler. "Systemfehler &H80004005 (-2147467259) Unbekannter Fehler". Die Fehlermeldung trat immer beim Versuch zu Speichern auf. Nach dem ich diesen Fehler ca. 10 mal bestätigt hatte, brach Excel ab mit der Meldung "Datei konnte nicht gespeichert werden".
bei meinen Internet recherchen stieß ich auf das Euroumrechnungstool von Excel welches ich dann auch gleich löschte. Nur leider ohne Erfolg.
Im VBA Editor stieß ich dann auf eine defekte Userform die genau diesen Fehler verursachte. Als ich diese löschte funktionierte auch wieder die Arbeitsmappe korrekt.
Weiß jemand warum dieser fehler auftrat. Die Userform funktionierte gestern noch und meine Excelkenntnisse sind auch sehr bescheiden.
Ich kann mit diesem Fehlercode überhaupt nichts anfangen und ich habe angst das sich der fehler eventuel auch noch auf andere Userforms ausweitet, da 5 weitere Userforms von mir einen ähnlichen code benutzen.
gruß alex
code in Userform

Private Sub CommandButton1_Click()
Dim name As String
Dim filename As String
If TextBox2 = "" Then
MsgBox "bitte Objektnamen eingeben"
Exit Sub
End If
On Error Resume Next
If Netz = True Then
name = "DB Netz"
filename = "Netz"
Else
If Netz_Magdeburg = True Then
name = "Netz Magdeburg"
filename = "Netz Magdeburg"
Else
If NNB69 = True Or Energie = True Then
name = "Unterwerke"
filename = "Unterwerke"
Else
If Station_und_Service = True Then
name = "Station und Service"
filename = "S&S"
Else
If OM = True Then
name = "Objektmanagement"
filename = "OM"
Else
If Vertrieb = True Then
name = "DB Vertrieb"
filename = "Vertrieb"
Else
If SBahn = True Then
name = "S-Bahn"
filename = "S-Bahn"
Else
If Extern = False And TextBox1 = "" Then
MsgBox "bitte Betreiber Wählen"
Exit Sub
Else
If TextBox1 = "" Then
name = "Extern"
filename = "Extern"
Else
name = TextBox1
filename = "Extern"
End If
End If
End If
End If
End If
End If
End If
End If
End If
vorlage = ThisWorkbook.Path & "\mastervorlagen\"
With Workbooks.Open(vorlage & "Vorlage_Master_ERA.xls").Worksheets(1)
Range("C7").Value = name
Range("c11").Value = TextBox2
Range("j11").Value = TextBox3
Range("p11").Value = TextBox4
Range("j7").Value = TextBox5
Range("j9").Value = TextBox6
End With
Workbooks("Vorlage_Master_ERA.xls").SaveAs (ThisWorkbook.Path & "\ERA\" & filename & "\" &  _
TextBox2 & ".xls")
With ThisWorkbook.Sheets(filename)
Loletzte1 = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 2).End(xlUp).Row, . _
Rows.Count)
Loletzte2 = IIf(IsEmpty(.Cells(.Rows.Count, 4)), .Cells(.Rows.Count, 2).End(xlUp).Row, . _
Rows.Count)
Loletzte3 = IIf(IsEmpty(.Cells(.Rows.Count, 5)), .Cells(.Rows.Count, 2).End(xlUp).Row, . _
Rows.Count)
Loletzte4 = IIf(IsEmpty(.Cells(.Rows.Count, 6)), .Cells(.Rows.Count, 2).End(xlUp).Row, . _
Rows.Count)
.Range("b" & Loletzte1 + 1) = TextBox2
Range("b" & Loletzte1 + 1).xlLeft
.Range("d" & Loletzte2 + 1) = "ERA"
.Range("D" & Loletzte2 + 1).Font.ColorIndex = 12
.Range("e" & Loletzte3 + 1) = TextBox5 & " " & TextBox6
.Range("e" & Loletzte3 + 1).Font.ColorIndex = 12
ThisWorkbook.Sheets(filename).Activate
.Range("F4:F" & Loletzte4 + 1).Formula = Range("f4").Formula
End With
With ThisWorkbook.Sheets("Wartungsroute")
Loletzte1 = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
Loletzte2 = IIf(IsEmpty(.Cells(.Rows.Count, 4)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
Loletzte3 = IIf(IsEmpty(.Cells(.Rows.Count, 5)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
Loletzte4 = IIf(IsEmpty(.Cells(.Rows.Count, 6)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
.Range("A" & Loletzte1 + 1) = TextBox2
.Range("A" & Loletzte1 + 1).xlLeft
.Range("D" & Loletzte2 + 1) = "ERA"
.Range("D" & Loletzte2 + 1).Font.ColorIndex = 9
.Range("B" & Loletzte4 + 1) = filename
End With
With ThisWorkbook.Sheets("Kontainer")
Loletzte1 = IIf(IsEmpty(.Cells(.Rows.Count, 4)), .Cells(.Rows.Count, 4).End(xlUp).Row, . _
Rows.Count)
Loletzte2 = IIf(IsEmpty(.Cells(.Rows.Count, 5)), .Cells(.Rows.Count, 4).End(xlUp).Row, . _
Rows.Count)
Loletzte3 = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 4).End(xlUp).Row, . _
Rows.Count)
Loletzte4 = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 4).End(xlUp).Row, . _
Rows.Count)
.Range("D" & Loletzte1 + 1) = TextBox2
.Range("D" & Loletzte1 + 1).xlLeft
.Range("E" & Loletzte2 + 1) = "ERA"
.Range("A" & Loletzte3 + 1) = TextBox3
.Range("B" & Loletzte4 + 1) = TextBox4
.Range("C" & Loletzte4 + 1) = filename
End With
Application.Run ("'" & ThisWorkbook.Path & "\ERA\" & filename & "\" & TextBox2 & ".xls" & "'! _
quartalswartung_schreiben")
Unload UserForm6
MsgBox "Bitte denkt daran noch das Objektdatenblatt auszufüllen, die Plankreuze zu setzen und  _
die Anlagen und Masteranlagen ID herauszusuchen!"
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Beispiel Fehlerbehandlung
05.02.2010 07:19:58
fcs
Hallo Alex,
eine solche Fehlermeldung ist wohl für jeden unverständlich ausser für den Programmierer bei MS, der diesen Notausgang festgelegt hat.
Generell sollte man etwas vorsichtig mit der Anweisung
On Error Resume Next
umgehen.
Diese überdeckt ggf. kleine/große Programmierfehler. Auch wenn die Prozedur in deinem Userform normal gut durchläuft, so stolpert Excel doch an jedem Fehler und macht ggf. irgend etwas. Möglicherweise bleibt da irgendetwas in der Datei hängen, womit es dann Probleme gibt.
Warum hast du "On Error Resume Next" eingebaut?
In welchen Zeilen treten denn Fehler auf, wenn du diese Zeile wegläßt?
Du fügst ja sehr viele Pfade und Dateinamen aus Einzelteilen zusammen.
Hier sollte ggf. vor dem Speichern/Ausführen des Makrostarts geprüft werden, ob das Verzeichnis bzw. die Datei vorhanden ist und dann kontrolliert abgebrochen werden.
Mehrfach kommen Zeilen mit ".xlLeft" am Ende vor, wie

Range("b" & Loletzte1 + 1).xlLeft
Diese Zeilen kannst du löschen. Sie verursachen Fehler weil es die Methode "xlLeft" für Range-Objekte nicht gibt. Oder du muss die Anweisungen umschreiben, damit das passiert, was du möchtest.
Eine Fehlerbehandlung kann man etwa in der nachfolgenden Form aufbauen.
Falls Fehler gemeldet werden, dann kann man bei der Prozedurentwicklung die Zeile
On Error Goto Fehler
kurzzeitig deaktivieren, um beim nächsten Makrodurchlauf festzustellen in welcher Zeile das Problem auftritt und ggf. gezielt Gegenmassnahmen treffen.
Gruß
Franz
Private Sub Test()
'Variablendeklaration
'Sprunganweisung für Fehler
On Error GoTo Fehler
'auszuführenden Anweisungen
Range("A1").xlLeft
Resume01:
MsgBox "Fehler 438"
'auszuführenden Anweisungen
'Fehlerbehandlung
Err.Clear
Fehler:
With Err
Select Case .Number
Case 0 'kein Fehler
Case 99999 '
'ggf. Prüfungen machen und Korrekturanweisungen
Resume Resume01 'Ausführung an anderer Stelle fortsetzen
Case 999998 '
'Prüfungen machen und Korrekturanweisungen
Resume 'Ausführung wiederholen
Case 999999
Resume Next 'Fehler zeile überspringen
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
'Variablen Aufräumen - Arrays auf 0 dimensionieren, Objekte = Nothing setzen
End Sub

Anzeige
AW: Beispiel Fehlerbehandlung
05.02.2010 09:41:37
Hajo_Zi
Hallo Franz,
warum ist der Beitrag offen?
Du hast doch eine Lösung vorgeschlagen, lasse doch den Fragesteller die Frage als offen kennzeichnen.
Man kann in diesem Forum offnen Beiträge nur rausnehmen durch einen neuen Beitrag, früher ging das einfacher.

Anzeige
AW: Beispiel Fehlerbehandlung
05.02.2010 14:51:38
alex
Hast recht das error resume next bruache ich garnicht...das stammt wohl noch aus den zeiten wo ich den code geschrieben habe um ihn stück für stück zu testen.
die zeile mit .xleft habe ich rausgelöscht. der code läuft ohne fehler durch.
gruß alex
;
Anzeige

Infobox / Tutorial

Systemfehler &H80004005 in Excel VBA beheben


Schritt-für-Schritt-Anleitung

  1. Identifiziere den Fehler:

    • Achte auf die Fehlermeldung "Systemfehler &H80004005 (-2147467259)", die häufig beim Speichern von Excel-Dateien auftritt.
  2. Überprüfe UserForms:

    • Wenn Du UserForms verwendest, überprüfe, ob eine von ihnen defekt ist. Lösche die fehlerhafte UserForm, um die Probleme zu beheben.
  3. Fehlerbehandlung anpassen:

    • Entferne oder ändere die Zeile On Error Resume Next, um sicherzustellen, dass Du die genaue Fehlerursache siehst.
  4. Verzeichnis prüfen:

    • Vergewissere Dich, dass das Zielverzeichnis existiert, bevor Du versuchst, eine Datei zu speichern. Füge einen Code-Schnipsel hinzu, um die Existenz des Verzeichnisses zu überprüfen.
  5. Code optimieren:

    • Überprüfe Deinen VBA-Code auf überflüssige Zeilen wie .xlLeft, die Fehler verursachen könnten. Diese Zeilen sollten entfernt oder korrekt angepasst werden.

Häufige Fehler und Lösungen

  • Fehler: Datei konnte nicht gespeichert werden:

    • Überprüfe, ob das Zielverzeichnis korrekt ist und existiert.
  • Fehler: Systemfehler &H8000FFFF:

    • Dieser Fehler kann durch defekte UserForms oder falsche Programmieranweisungen verursacht werden. Entferne defekte UserForms und optimiere Deinen Code.
  • On Error Resume Next führt zu Problemen:

    • Diese Anweisung kann zu unerwarteten Fehlern führen. Stattdessen sollte eine gezielte Fehlerbehandlung implementiert werden.

Alternative Methoden

  • Verwendung von On Error GoTo für Fehlerbehandlung:

    On Error GoTo Fehler
    ' Deine Code-Anweisungen
    Fehler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Speichern als CSV:

    • Manchmal kann das Speichern als CSV-Format helfen, das Problem zu umgehen, insbesondere wenn die Datei beschädigt ist.

Praktische Beispiele

Hier ist ein Beispiel für eine verbesserte Fehlerbehandlung:

Private Sub CommandButton1_Click()
    On Error GoTo Fehler
    ' Dein Code
    Exit Sub
Fehler:
    MsgBox "Fehlernummer: " & Err.Number & " - " & Err.Description
End Sub

Dieses Beispiel zeigt, wie Du eine klarere Fehlermeldung erhalten kannst, um den Fehler schneller zu identifizieren.


Tipps für Profis

  • Verwende Debugging-Tools: Nutze die Debugging-Funktionen von VBA, um den Code schrittweise auszuführen und Fehler frühzeitig zu erkennen.

  • Modularisiere Deinen Code: Teile Deinen Code in kleinere, überschaubare Funktionen auf, um die Fehlersuche zu erleichtern.

  • Dokumentiere Deinen Code: Halte Kommentare in Deinem Code fest, die den Zweck jeder Funktion erläutern, um die Wartung zu erleichtern.


FAQ: Häufige Fragen

1. Was ist der Fehler &H80004005? Der Fehler &H80004005 ist ein allgemeiner Systemfehler, der oft bei Problemen mit UserForms oder beim Speichern von Dateien auftritt.

2. Wie kann ich den Fehler &H8000FFFF beheben? Überprüfe Deine UserForms und entferne defekte Elemente. Optimisiere Deine Fehlerbehandlung, um die genaue Fehlerursache zu identifizieren.

3. Warum sollte ich On Error Resume Next vermeiden? Diese Anweisung kann dazu führen, dass Fehler ignoriert werden, was es schwierig macht, die genaue Ursache von Problemen zu finden. Verwende stattdessen gezielte Fehlerbehandlungen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige