Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1164to1168
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

On Error wird ignoriert

On Error wird ignoriert
Gregor
Hallo
In einer For To Schlaufe sezte ich den Code "On Error GoTo weiter" um eine Fehlermeldung abzufangen. Leider funktioniert das nur beim ersten Mal, beim zweiten mal wird das Makro unterbrochen und die Fehlermeldung erscheint.
Das Häckchen bei Extras, Optionen, Allgemein ist auf "Nicht verarbeitgete Fehlern" gesetzt. Das ist nervig, kann ich das beheben?
Gruss Gregor
On Error wird NICHT ignoriert
15.07.2010 14:52:49
NoNet
Hallo Gregor,
eigentlich wird "On Error" NICHT ignoriert !
Falls doch, liegt das an Deinem Code. Da Du uns diesen aber offenbar vorenthalten möchtest, wird Dir vermutlich niemand weiterhelfen können...
Im Klartext : Poste doch bitte mal den betreffenden Code, damit wir etwas zum Analysieren haben..
Gruß, NoNet
AW: On Error wird NICHT ignoriert
15.07.2010 15:10:15
Gregor
Hallo NoNet
Noch so gerne, hier mein Code
Sub Pläne_aktualisieren()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim Abk As Variant, URL As Variant
Spalte_Abkürzung = Worksheets("Master Datei").Rows(1).Find("Abkürzung", lookAT:=xlWhole).Column
Spalte_Plan = Worksheets("Master Datei").Rows(1).Find("Plan  I-B", lookAT:=xlWhole).Column
Worksheets("Master Datei").Activate
intLastRow = Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
For Start = 1 To intLastRow
Objekt = Worksheets("Tabelle1").Cells(Start, 1).Value
Set rng = Sheets("Master Datei").Range("A:A").Find(Objekt, lookAT:=xlWhole)
If Not rng Is Nothing Then
Zeile = rng.Row
Abk = Sheets("Master Datei").Cells(Zeile, Spalte_Abkürzung).Value
On Error GoTo weiter
'        On Error Resume Next
Sheets("Master Datei").Shapes("Plan" & Abk).Select
'---Hyperlink zuteilen
URL = Sheets("Tabelle1").Cells(Start, 3).Value
ActiveSheet.Hyperlinks.Add Anchor:=Selection.ShapeRange.Item(1), Address:=URL
GoTo weiter1
weiter:
'---wenn neu
ActiveSheet.Shapes("Plan").Copy
Cells(Zeile, Spalte_Plan).Select
ActiveSheet.Paste
With Selection.ShapeRange
.Name = "Plan" & Abk
End With
ActiveSheet.Shapes("Plan" & Abk).Select
'---Hyperlink zuteilen
URL = Sheets("Tabelle1").Cells(Start, 3).Value
ActiveSheet.Hyperlinks.Add Anchor:=Selection.ShapeRange.Item(1), Address:=URL
End If
weiter1:
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

Danke und Gruss
Gregor
Anzeige
AW: On Error wird NICHT ignoriert
15.07.2010 15:43:15
Ramses
Hallo
Der Fehler wird nicht abgefangen weil
If Not rng Is Nothing Then
Zeile = rng.Row
Abk = Sheets("Master Datei").Cells(Zeile, Spalte_Abkürzung).Value
On Error GoTo weiter
wenn "rng" in diesem Fall "nothing" ist, die Anweisung zur Fehlerbehandlung aber erst dann kommt, wenn die Bedingung zutrifft !!!!
Setz die Zeile mal an den Anfang des Codes bzw. vor die Schleife
Gruss Rainer
AW: On Error wird NICHT ignoriert
15.07.2010 16:15:23
Gregor
Rainer
Wenn rng = nothing ist, muss On error gar nicht aktiv sein, weil ja dieses Objekt nicht vorhanden ist und entsprechend auch keine Adresse zugeteilt werden kann/muss. Aber selbst wenn ich On Error GoTo vor die Schlaufe setze, wird ein Fehler wird nur das erste mal ignoriert.
Gregor
Anzeige
nur ma so....
15.07.2010 16:18:03
Oberschlumpf
Gregor ...
...hattest du echt absolut gar keine Zeit, ein Hi oder Hallo vor Rainer zu setzen?
Das wars schon...
Ciao
Thorsten
AW: On Error wird NICHT ignoriert
15.07.2010 16:24:11
Ramses
Hallo
"...Wenn rng = nothing ist, muss On error gar nicht aktiv sein..:"
Dann macht die Fehlerbehandlung an dieser Stelle auch keinen Sinn
"..., weil ja dieses Objekt nicht vorhanden i..."
Aber eben hier. Wenn die Set-Anweisung nicht ausgeführt werden kann kommt es doch schon zum Fehler.
Und dieser Fehler wird nicht abgefangen
Gruss Rainer
AW: On Error wird NICHT ignoriert
15.07.2010 16:18:57
JogyB
Wenn "rng" Nothing ist, dann ist die IF-Bedingung nicht erfüllt und es geht direkt zum Next. Wo soll da der Fehler entstehen? Es ist natürlich richtig, dass ein Teil des Codes nicht durch das "On Error GoTo weiter" abgedeckt ist, da das sich nach dem Sprung zu weiter wieder auf "GoTo 0" zurücksetzt, nur ist der Code eigentlich unkritisch.
Wo genau passiert denn der Fehler? Kann ja eigentlich nur in den zwei Zeilen sein:
Objekt = Worksheets("Tabelle1").Cells(Start, 1).Value
Set rng = Sheets("Master Datei").Range("A:A").Find(Objekt, lookAT:=xlWhole)
Wobei ich nicht wüsste, was da falsch laufen soll.
Ich habe Deinen Code mal überarbeitet und die Sprungmarken rausgeworfen, die sind hier unnötig. Mangels Originaltabelle kann ich es nicht testen, hoffe mal, dass ich keinen Fehler eingebaut habe.
Sub Pläne_aktualisieren()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim Abk As Variant, URL As Variant
Spalte_Abkürzung = Worksheets("Master Datei").Rows(1).Find("Abkürzung", lookat:=xlWhole).Column
Spalte_Plan = Worksheets("Master Datei").Rows(1).Find("Plan  I-B", lookat:=xlWhole).Column
Worksheets("Master Datei").Activate
intLastRow = Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
For Start = 1 To intLastRow
Objekt = Worksheets("Tabelle1").Cells(Start, 1).Value
Set rng = Sheets("Master Datei").Columns(1).Find(Objekt, lookat:=xlWhole)
If Not rng Is Nothing Then
Zeile = rng.Row
Abk = Sheets("Master Datei").Cells(Zeile, Spalte_Abkürzung).Value
URL = Sheets("Tabelle1").Cells(Start, 3).Value
On Error Resume Next
'---Hyperlink zuteilen
ActiveSheet.Hyperlinks.Add Anchor:=Sheets("Master Datei").Shapes("Plan" & _
Abk).ShapeRange.Item(1), Address:=URL
' bei Fehler neu Erstellen
If Err.Number  0 Then
ActiveSheet.Shapes("Plan").Copy
Cells(Zeile, Spalte_Plan).Select
ActiveSheet.Paste
With Selection.ShapeRange
.Name = "Plan" & Abk
ActiveSheet.Hyperlinks.Add Anchor:=.Item(1), Address:=URL
End With
End If
End If
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

Gruß, Jogy
Anzeige
AW: On Error wird NICHT ignoriert
15.07.2010 16:26:57
Ramses
Hallo
Bischen mühsam in Gedanken das ganze durchzuspülen. Nachbauen tu ich das nicht.
Wie schon im anderen post erwähnt.
Objekt = Worksheets("Tabelle1").Cells(Start, 1).Value
Set Rng = Sheets("Master Datei").Columns(1).Find(Objekt, lookat:=xlWhole)
Wenn "Objekt" leer ist und mit der "Set Rng" Anweisung keine Zuweisung möglich ist, dann tritt HIER der Fehler auf, und nicht im nachgeordneten Code.
Geh das ganze doch mal im Einzeschritt durch und du wirst sehen dass ich recht habe
Gruss Rainer
AW: On Error wird NICHT ignoriert
15.07.2010 16:40:07
JogyB
Hi Rainer,
Find produziert eigentlich nur dann Fehler, wenn die Range in der gesucht wird nicht existiert - ist hier aber nicht der Fall, sonst würde der Fehler schon im ersten Durchlauf auftreten.
Aber wäre trotzdem natürlich gut, die genaue Fehlerstelle zu kennen, sonst können wir beide nur raten.
Gruß, Jogy
Anzeige
AW: On Error wird NICHT ignoriert
15.07.2010 16:58:43
Gregor
Hallo
Zum besseren Verständnis zum Code.
In einer Datei Spalte 4 hat es Shapes, die verlinkt sind. Nun ändert teilweise die Linkadresse, die aktualisiert werden soll. Es gibt aber auch noch Objekte ohne Shape, weil bis anhin kein Link existierte. Der Code soll also prüfen, ob ein Shape mit diesem Namen vorhanden ist (Name = Objekt & Abk). Wenn ja, muss dieses mit der neuen Adresse verlinkt werden, wenn nicht, ist ein neues Shape zu kopieren und mit der Adresse zu verlinken. Ist also noch kein Shape vorhanden kann es nicht gefunden werden und erzeugt eine Fehlermeldung. Soviel zur Aufgabe.
Beim Code von Jogy wird immer ein neues Shapes erstellt, und wenn schon vorhanden nur noch der Name "Plan" zugeteilt (ohne Abk) und verlinkt. Es sind dann 2 Shapes übereinander.
Etwas kompliziert, ich weiss, aber erst recht vielen Dank
Gregor
Anzeige
AW: On Error wird NICHT ignoriert
15.07.2010 17:25:56
JogyB
Teste bitte mal den zweiten Code, im ersten war ein Fehler. Oder poste eine Beispieldatei. Und bitte sag uns endlich, wo der Fehler in Deinem Code auftritt.
Gruß, Jogy
Fehler im Code
15.07.2010 16:35:38
JogyB
Und natürlich doch einen Fehler eingebaut, so kann die erste Hyperlink-Zuweisung nicht gehen:
Sub Pläne_aktualisieren()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim Abk As Variant, URL As Variant
Spalte_Abkürzung = Worksheets("Master Datei").Rows(1).Find("Abkürzung", lookat:=xlWhole).Column
Spalte_Plan = Worksheets("Master Datei").Rows(1).Find("Plan  I-B", lookat:=xlWhole).Column
Worksheets("Master Datei").Activate
intLastRow = Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
For Start = 1 To intLastRow
Objekt = Worksheets("Tabelle1").Cells(Start, 1).Value
Set rng = Sheets("Master Datei").Columns(1).Find(Objekt, lookat:=xlWhole)
If Not rng Is Nothing Then
Zeile = rng.Row
Abk = Sheets("Master Datei").Cells(Zeile, Spalte_Abkürzung).Value
URL = Sheets("Tabelle1").Cells(Start, 3).Value
On Error Resume Next
'---Hyperlink zuteilen
ActiveSheet.Hyperlinks.Add Anchor:=Sheets("Master Datei").Shapes("Plan" & Abk), _
Address:=URL
' bei Fehler neu Erstellen
If Err.Number  0 Then
ActiveSheet.Shapes("Plan").Copy
Cells(Zeile, Spalte_Plan).Select
ActiveSheet.Paste
With Selection.ShapeRange
.Name = "Plan" & Abk
ActiveSheet.Hyperlinks.Add Anchor:=.Item(1), Address:=URL
End With
End If
End If
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Gruß, Jogy
Anzeige
AW: Fehler im Code
15.07.2010 16:54:39
Nepumuk
Hallo Ihr,
nochmal für alle zum mitschreiben:
Der Fehler wird ausgelöst weil davor schon ein Fehler auftrat und dieser nicht verarbeitet wurde. Verarbeitet heißt: Es wurde eine Resume - / Resume Next - Anweisung durchlaufen.
Hier mal ein einfaches Beispiel wie der Fehler ausgelöst wird:
Public Sub test1()
    Dim i As Integer
    On Error GoTo weiter1
    i = 1 / 0
    weiter1:
    On Error GoTo weiter2
    i = 1 / 0
    weiter2:
End Sub

Und hier ein Beispiel wie der Fehler verarbeitet werden kann (ist zwar nicht schön, da die Resume Next - Anweisung auf sich selbst verweist, aber funktioniert):
Public Sub test2()
    Dim i As Integer
    On Error GoTo weiter1
    i = 1 / 0
    weiter1:
    Resume Next
    On Error GoTo weiter2
    i = 1 / 0
    weiter2:
End Sub

Ist keine Zauberei, steht alles in der Hilfe zur On Error-Anweisung. Die müsste man nur mal lesen !!!
Gruß
Nepumuk
Anzeige
AW: Fehler im Code
15.07.2010 17:35:45
JogyB
Danke für den Hinweis, das war mir nicht bewusst... erklärt aber den einen oder anderen Fehler, den ich mal gehabt habe, wenn ich im errorHandler noch ein paar Befehle ausgeführt habe, die je nach Art des vorhergehenden Fehlers schief gehen können.
Nur wenn wir schon mal dabei sind: Wie würdest Du es lösen, wenn nach einem Fehler in den errorHandler gesprungen werden soll und dort unbedingt noch Befehle ausgeführt werden müssen, die aber wieder Fehler verursachen können? Mit Resume [Zeilenmarke] und die Marke dann im errorHandler?
Gruß, Jogy
AW: Fehler im Code
15.07.2010 18:49:21
Nepumuk
Hallo,
na so wie ich es dir gezeigt habe. Mit Resume Next
Gruß
Nepumuk
Anzeige
AW: Fehler im Code
16.07.2010 09:13:31
JogyB
Du hast mich falsch verstanden. Mit Resume Next springe ich auf die Codezeile nach dem Fehler, dorthin will ich aber gar nicht. Bei mir ist es meist so, dass bei einem Fehler der Code nicht mehr weiter ausgeführt, sondern einfach nur noch kontrolliert beendet werden soll. Ich zerlege meinen Code in der Regel ziemlich stark und entweder läuft eine Funktion komplett durch oder das was sie machen sollte hat eh nicht geklappt (was ich dann am Rückgabewert sehe).
Wenn nun bspw. im Code eine Arbeitsmappe geöffnet wird, die am Ende wieder geschlossen sein soll, dann wäre es natürlich schön wenn man das in der Fehlerbehandlung einfach mit
errorHandler:
On Error Resume Next
Workbooks("Quelldaten.xls").Close False

erledigen könnte - ich muss mich dann nicht darum sorgen, ob die Mappe überhaupt offen ist. Natürlich kann ich jetzt mehrfache Sprungmarken verwenden, Objekte zuweisen (die ich dann auf "Nothing" prüfen kann) etc., nur wenn man nun mehrere Arbeitsmappen öffnet und auch wieder schließt, dann werden das etwas viel Aufwand nur rein dafür, dass alle Arbeitsmappen zu sind.
Jetzt kann man das natürlich durch
errorHandler:
resume endError
endError:
On Error Resume next
Workbooks("Quelldaten.xls").Close False

lösen, ist zumindest einfacher als 5+ Sprungmarken zu verwenden. Nur schön sieht es dennoch nicht aus.
Gruß, Jogy
Anzeige
AW: Fehler im Code
15.07.2010 18:22:44
Gregor
Hallo Jogy
Ich werde morgen den 2. Code testen, komme heute nicht mehr dazu. Ich werde euch das Ergebnis dann mitteilen.
Bis Morgen
Gregor
AW: Fehler im Code
16.07.2010 08:06:18
Gregor
Hallo
Ich habe den 2. Code von Jogy getestet, und ...... er bringt das richtige Ergebnis. Denn wenn noch kein Shapes vorhanden ist, erzeugt der Befehl
ActiveSheet.Hyperlinks.Add Anchor:=Sheets("Master Datei").Shapes("Plan" & Abk), _
Address:=URL
eine Fehlermeldung und muss abgefangen werden. Mit dem Code If Err.Number = 0 wird bei einer Fehlermeldung ein neuer Shape erstellt, was richtig ist.
Dank an alle, die sich diesem Problem angenommen haben.
Gruss Gregor
Grundregeln
15.07.2010 16:43:09
Erich
Hi Gregor,
den Code hast du nun ja gepostet, aber fehlt da nicht noch etwas?
"wird das Makro unterbrochen und die Fehlermeldung erscheint" ist zu wenig.
WO im Code wird unterbrochen, WELCHER Fehler wird gemeldet?
Schau bitte mal in die Forums-FAQ )
Zitat:

Fehlerbeschreibungen
Beschränke Dich nicht auf die lapidare Feststellung Excel meldet Fehler;
gib die exakte Fehlermeldung an.
Stoppt Excel einen VBA-Code, gib die exakte Zeile des Programmabbruchs an.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige