Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1816to1820
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

Laufzeitfehler 438 in Schleife

Laufzeitfehler 438 in Schleife
08.03.2021 17:46:06
Matthias
Hallo zusammen,
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.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 438 in Schleife
08.03.2021 17:59:51
Nepumuk
Hallo Matthias,
an Stelle von:
Cells(j, 1).Paste
das:
Cells(j, 1).PasteSpecial Paste:=xlPasteAll
Das stimmt aber etwas an der Logik nicht, denn am Schluss willst du in Zelle 0 einfügen und läufst damit in den nächsten Fehler. Da sich mir nicht erschließt was du damit vor hast, musst du selbst dahinter kommen.
Gruß
Nepumuk

AW: Laufzeitfehler 438 in Schleife
08.03.2021 18:17:09
Matthias
Hallo Nepumuk,
vielen Dank für die schnelle Hilfe.
tatsächlich ist da was weiteres falsch.
Nicht nur, dass der Code bei Zeile 2 nicht aufgehört hat,
sondern auch, dass er den ersten kopierten Wert in jede obere Zeile eingefügt hat.
also erstmal zu dem Thema Zelle 0: wofür steht denn der Wert 2 bei For j = lz to 2?
Dies müsste doch der Wert sein, bei dem die Schleife aufhört zu arbeiten?
Wobei ich fast schätze, dass der Fehler sich in der Do- Schleife verbirgt,
würde dann auch erklären, wieso der Wert in allen Zeilen ab der ersten kopierten der gleiche ist.
Kannst du dort einen Fehler sehen?
Die Do-Schleife soll aufhören, wenn der Wert so oft eingefügt wurde, bis die Auftragsnummer aus Spalte 2 nicht mehr dieselbe ist.
Liebe Grüße
Matthias

Anzeige
AW: Laufzeitfehler 438 in Schleife
08.03.2021 18:25:26
Matthias
Hallo an alle,
die Frage hat sich erledigt, die Do-Schleife in der For-Schleife war nicht nötig,
falls jemand über die Suche hier her findet und die Lösung brauchen sollte...
Die zweite Schleife sieht bei mir nun so aus:

For j = lz To 2 Step -1
auf = Cells(j, 2).Value
auf2 = Cells(j - 1, 2).Value
If auf = auf2 Then
Cells(j, 1).Copy
j = j - 1
Cells(j, 1).PasteSpecial Paste:=xlPasteAll
j = j + 1
Else
End If
Next j


AW: Laufzeitfehler 438 in Schleife
08.03.2021 18:29:26
onur
Damit wir alle die Logik hinter deiner Datei verstehen, solltest du mal das Ganze ohne Excel/VBA-Aiusdrücke erklären, z.B. was die rätselhaften Spaltenköpfe bedeuten, was die Funktion diesr Tabelle ist, warum z.B. in Zeile 8 ZWEI auftraghspositionen eingetragen sind, ich aber nur EINE sehen kann.

Anzeige
AW: Laufzeitfehler 438 in Schleife
08.03.2021 19:25:38
Matthias
Hallo Onur,
das steht doch im Text:
Anzahl Positionen = Bereichsübergreifend
Zeilen in der Datei sind nur aus einem Bereich.
Zweck: Auswertung, ob ein Auftrag nur in dem Bereich Positionen enthält oder eben bereichsübergreifend.
Was du mit internen Bezeichnungen anfangen willst, ist mir allerdings rätselhaft.
Problem ist bereits gelöst.
LG

AW: Laufzeitfehler 438 in Schleife
08.03.2021 19:44:42
onur
Schön für dich !!!

AW: Laufzeitfehler 438 in Schleife
08.03.2021 18:31:44
Daniel
Hi
deiner Beschreibung nach müsste folgende Formel in einer freien Spalte ausreichen:
Formel für Zeile 2:
=WENN(B3=B2;"";WENN(A2=E2;30;12))
die Formel dann einfach nach unten ziehen.
Gruß Daniel

Anzeige
AW: Laufzeitfehler 438 in Schleife
08.03.2021 19:33:18
Matthias
Hi Daniel,
danke dir, aber das reicht tatsächlich nicht aus.
Ich muss die Situation wohl unzureichend geschildert haben,
allerdings hat sich das Problem mittlerweile erledigt und ich habe meine Auswertung mittels VBA fertig stellen können. Sollte sich jemand für den Lösungsweg interessieren, der Code den ich hier gepostet hab funktioniert, letzte Zeile in Schritt 2 musste ich wegen eines Fehlers manuell eintragen, ist für mich jetzt aber kein Drama gewesen.
Im letzten Schritt dann:
For i = 2 To lz
kanr = Cells(i, 1).Value
kanrn = Cells(i, 5).Value
If kanr = kanrn Then
Cells(i, 1).Value = "2030"
Else
Cells(i, 1).Value = "2012"
End If
Next i
Danke nochmal für die Anteilnahme!
Besten Gruß
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige