Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1760to1764
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 in DoUntil funzt nur 1x

On Error in DoUntil funzt nur 1x
04.06.2020 18:40:10
Georg
Hallo zusammen,
ich finde in der Recherche nichts was mit weiterhilft - leider, auch wenn das Problem mir eigentlich trivial vorkommt. Aber so kann man vielleicht eine weitere Variante klären...
Situation: ich habe einen Daten Abzug ("QUELLE"), in dem zu PSP-Elementen aktuelle Umsätze in Monatsspalten vorliegen. Ich möchte aus dem Abzug nur bestimmte Spalten in ein zweites Blatt ("ZIEL") übertragen. Dazu habe ich dort in Zeile 5 die benötigten Spaltenköpfe nebeneinander stehen. Der Code läuft mit einer Do Until Schleife durch die Zeile und schnappt sich einen Spaltenkopf nach dem anderen, springt in die QUELLE, sucht dort die Spalte und überträgt die Spalte in das ZIEL. Soweit so gut.
Problem: Jetzt sind im ZIEL aber einige Spalten bereits vorhanden (zukünftige Monate), die in der QUELLE erst im Laufe der Zeit auftauchen werden. Das Makro sucht also nach Spaltenköpfen, die es nicht gibt. Kein Problem, dachte ich, dafür gibt es doch den "On Error GoTo..." Befehl, mit dem ich in diesem Fall an die Sprungmarke hüpfe. Das klappt auch, aber nur EINMAL !
Mit anderen Worten: die letzte Spalte in QUELLE ist z.B. die vom Mai. Wenn er jetzt die Juni Spalte nicht findet, springt er zu der Sprungmarke und durchläuft die Schleife neu. Beim zweiten nicht zu findenden Spaltenkopf klappt das nicht mehr und ich bekomme den Fehler: "Laufzeitfehler 91, Objektvariable...nicht festgelegt".
Ich habe gem. Forumsideen mit resume next, Err.Clear u.a. rumgemacht und versucht die Fehlerbearbeitung zurückzusetzen, aber da klappt nichts. Beim zweiten Fehler knallt es jedes mal..
Hier mein vereinfachter Code:
Sub Daten_übertragen()
Dim vSPALTE
Dim vSPALTENNAME
vSPALTE = 0
' in Zeile 5 im Blatt ZIEL stehen die zu suchenden Spaltenköpfe
Do Until Sheets("ZIEL").Range("E5").Offset(0, vSPALTE).Value = ""
vSPALTENNAME = Sheets("ZIEL").Range("E5").Offset(0, vSPALTE).Value
' im  Blatt "QUELLE" wird nach der Spalte gesucht
Sheets("QUELLE").Select
On Error GoTo Marke1    ' das klappt nur bei der ERSTEN falschen Schleife
Range("E2:AZ2").Find(what:=vSPALTENNAME, LookAt:=xlWhole).Select
'... hier kommt der weitere Code, blablabla
Marke1:
vSPALTE = vSPALTE + 1
Loop
End Sub
Was mach ich falsch? Wie kann ich die Fehlerbehandlung zurücksetzen? Oder hab ich ein ganz anderes Problem?
verzweifelter Gruß und Dank vorab
Georg

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: On Error in DoUntil funzt nur 1x
04.06.2020 18:42:28
Hajo_Zi
Hallo Georg,
ohne on Error
Dim RaZelle as Range
RaZelle= Range("E2:AZ2").Find(what:=vSPALTENNAME, LookAt:=xlWhole)
If not RaZelle is Notrhing then

AW: On Error in DoUntil funzt nur 1x
04.06.2020 19:39:51
Luschi
Hallo Georg & Hajo,
wenn schon dann mindestens so:
Set RaZelle = Range("E2:AZ2").Find(What:=vSPALTENNAME, LookAt:=xlWhole)
Laut Bemerkungen der Vba-Online-Hilfe sind mindesten 4 Parameter anzugeben neben 'What':
Die Einstellungen für LookIn, LookAt, SearchOrder und MatchByte werden gespeichert, sobald Sie diese Methode verwenden.
Gruß von Luschi
aus klein-Paris
PS: Vba kennt 'Notrhing' auch nicht!
Anzeige
On Error in DoUntil nie möglich?
05.06.2020 08:05:33
Georg
Moin ihr zwei,
klasse, danke für die Hinweise! Mach ich so.
Folgefrage: bedeutet das, dass ein On Error innerhalb einer Do While Schleife grundsätzlich nicht möglich ist?
Gruß Georg
AW: On Error in DoUntil nie möglich?
05.06.2020 10:49:16
Luschi
Hallo Georg,
man kann 'On Error ...' auch in einer Schleife zielgerichtet einsetzten. In Deinem Fall nützt _ das aber überhaupt nichts, denn wenn nix gefunden wurde, wird kein Fehler ausgelöst, sondern die Variable 'RaZelle' wird auf 'Nothing' gesetzt. Man fängt das so ab:

If Not (RaZelle Is Nothing) Then
'Suchwert wurde gefunden
Else
'Suche war erfolglos!
End If
Gruß von Luschi
aus klein-Paris
Anzeige
AW: On Error in DoUntil funzt nur 1x
05.06.2020 11:12:33
Daniel
Hi
Nach einem Fehlersprung befindet du dich im "Fehlerbehandlungsmodus".
Ist dieser aktiv, ist kein weiterer Fehlersprung mehr möglich, der Fehlerbehandlungsmodus muss, wie du erkannt hast, erst wieder zurückgesetzt werden.
Der dazu verwendete Befehl RESUME ist für das Überspringen von Codebereichen so wie du es vor hast aber ungeeignet, weil er an die Stelle zurückspringt, an der der Fehler passiert ist.
In der Regel sollte man daher Fehler möglichst vermeiden.
Im Falle von .Find geht das ja recht elegant wie von Luschi gezeigt, ansonsten müsste man vorher prüfen, ob der Fehlerfall eintreten wird (hier z.B. mit WorksheetFunction.CountIf(...))
Ist diese Vorabprüfung nicht möglich oder zu aufwendig, dann könnte man auch so arbeiten:
Sub Daten_übertragen()
Dim vSPALTE
Dim vSPALTENNAME
vSPALTE = 0
' in Zeile 5 im Blatt ZIEL stehen die zu suchenden Spaltenköpfe
Do Until Sheets("ZIEL").Range("E5").Offset(0, vSPALTE).Value = ""
vSPALTENNAME = Sheets("ZIEL").Range("E5").Offset(0, vSPALTE).Value
' im  Blatt "QUELLE" wird nach der Spalte gesucht
Sheets("QUELLE").Select
On Error Resume Next
Range("E2:AZ2").Find(what:=vSPALTENNAME, LookAt:=xlWhole).Select
If Err = 0 then
On Error Goto 0
'... hier kommt der weitere Code, blablabla
End if
On Error Goto 0
vSPALTE = vSPALTE + 1
Loop
End Sub
Gruß Daniel
Anzeige
AW: On Error in DoUntil funzt nur 1x
05.06.2020 13:47:23
Georg
wieder viel gelernt
danke für Eure Erklärungen / Hilfe und eure Zeit!
schönes Wochenende und gesund bleiben
Georg

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige