Laufzeitfehler 438 in Schleife
08.03.2021 17:46:06
Matthias
ich hoffe mir kann hier mal wieder kompetent geholfen werden.
Folgendes:
Ich habe eine Datei mit allen Positionen, die einen bestimmten Bereich durchlaufen haben.
Spalte B = Auftragsnummer
Spalte E = Gesamtanzahl Positionen der Auftragsnummer (bereichsübergreifend)
Jede Position hat ihre eigene Zeile.
Teilweise habe ich genauso viele Zeilen einer Auftragsnummer, wie die Gesamtanzahl aus Spalte E ist.
Teilweise sind es weniger.
Stimmt die Zahl überein, soll in Spalte A im letzten Schritt eine 30 stehen,
wenn die Zahl sich unterscheidet soll es eine 12 sein.
Da ich mir vba autodidaktisch immer mal wieder nebenbei beibringe, arbeite ich mit Zwischenschritten.
Erst zähle ich die Anzahl der Zeilen einer Auftragsnummer hoch, bis ich in der letzten Zeile bin.
Anschließend wollte ich mich von unten nach oben arbeiten,
um die letzte Zahl einer Auftragsnummer aus Spalte A in allen Zeilen darüber einfügen,
wenn die Auftragsnummer übereinstimmt.
Der letzte Schritt, den ich bisher nur geplant habe, ist Zeileninhalt der Spalten A und E zu vergleichen
und A dementsprechend zu überschreiben (12/30)
Beim kopieren aus Schritt 2 entsteht ein Laufzeitfehler.
Vielleicht kann sich jemand mal meinen bisherigen Code und meine Beispieldatei anschauen.
Beispieldatei: https://www.herber.de/bbs/user/144567.xlsm
Code:
Sub test1()
Dim kanr As Long
Dim kanrn As Long
Dim i As Long
Dim j As Long
Dim lz As Long
Dim anzpos As Long
Dim auf As Long
Dim auf2 As Long
lz = 22
anzpos = 1
For i = 2 To lz
kanr = Cells(i, 2).Value
kanrn = Cells(i + 1, 2).Value
Cells(i, 1).Value = anzpos
If kanr = kanrn Then
anzpos = anzpos + 1
ElseIf kanr kanrn Then
Cells(i, 1).Value = anzpos
anzpos = 1
End If
Next i
For j = lz To 2 Step -1
auf = Cells(j, 2).Value
auf2 = Cells(j - 1, 2).Value
Do Until auf auf2
Cells(j, 1).Copy
j = j - 1
Cells(j, 1).Paste
Loop
Next j
End Sub
btw: Es handelt sich um eine einmalige Auswertung, weshalb das ganze nicht besonders elegant sein muss.Die Originaldatei hat jedoch enorm viele Daten, deshalb mache ich es per VBA.