On Error in DoUntil funzt nur 1x
04.06.2020 18:40:10
Georg
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