Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

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


Betrifft: Systemfehler &H80004005 (-2147467259) von: alex
Geschrieben am: 04.02.2010 22:35:16

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

  

Betrifft: AW: Beispiel Fehlerbehandlung von: fcs
Geschrieben am: 05.02.2010 07:19:58

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



  

Betrifft: AW: Beispiel Fehlerbehandlung von: Hajo_Zi
Geschrieben am: 05.02.2010 09:41:37

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.

GrußformelHomepage


  

Betrifft: AW: Beispiel Fehlerbehandlung von: alex
Geschrieben am: 05.02.2010 14:51:38

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