Informationen und Beispiele zum Thema MsgBox | |
---|---|
![]() |
MsgBox-Seite mit Beispielarbeitsmappe aufrufen |
Informationen und Beispiele zum Thema CommandButton | |
---|---|
![]() |
CommandButton-Seite mit Beispielarbeitsmappe aufrufen |
Informationen und Beispiele zum Thema Userform | |
---|---|
![]() |
Userform-Seite mit Beispielarbeitsmappe aufrufen |
Informationen und Beispiele zum Thema TextBox | |
---|---|
![]() |
TextBox-Seite mit Beispielarbeitsmappe aufrufen |
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).xlLeftDiese 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.
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.
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