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

Makro-Schleife Laufzeitfehler 28

Makro-Schleife Laufzeitfehler 28
15.05.2022 09:55:29
Klaus
Geschätzte Excel-Fachleute,
ich darf mich in nachstehender Angelegenheit verbunden mit der Bitte um Unterstützung an euch wenden.
Projektbeschreibung:
In einer Datenbank werden Fahrbahnbreiten von Straßen verwaltet. Datenbanktechnisch handelt es sich dabei um Längenobjekte (Rechtecke, Trapeze) die eine Anfangs- und Endbreite sowie den jeweils zugeordneten Straßen-Rollkilometer bei Objektanfang- und Ende beinhalten. Die Aufgabenstellung sieht nun vor, diese Basisdaten so umzuwandeln, dass sie für das Erzeugen von Flächenpolygonen in einer GIS-Datenbank verwendet werden können. Zu diesem Zweck habe ich beiliegendes Excel-Formular erstellt.
Um die GIS-Polygone auch in kurvigen Straßenbereichen brauchbar auftragen zu können, müssen die Datenbank-Längenobjekte in kürzere Abschnitte unterteilt werden (z.B. 5 oder 10 m) und die Fahrbahnbreiten bei Trapezen entsprechend interpoliert ermittelt werden. Der in der Tabelle Referenzdaten - Zeile $8 erstellte Formelblock erledigt das, der Faktor für das Teilen der Abschnitte ist auch dort (Referenzdaten - $A$2) hinterlegt.
Das Abarbeiten und Erzeugen der einzelnen Abschnitte wird über die eingebaute Makro-Schleife Private Sub FBRD_Schleife() abgewickelt, wobei in jeder neu geschaffenen Datenzeile der Formelblock aus den Referenzdaten kopiert und dort dann eingefügt wird. Die für die Schleifensteuerung relevante Variabel Z_TEIL wird aus Spalte D der Tabelle Makro_Basisdaten ausgelesen. Beim 1-maligen Starten des Makros muss daher die Zelle D2 der Tabelle Makro_Basisdaten selektiert sein.
Grundsätzlich kann ich so relativ komfortabel die für das Auftragen im GIS geforderte Datenstruktur erzeugen, doch leider gibt Excel immer wieder einen Laufzeitfehler 28 (nicht genügend Stapelspeicher) aus. Mein Privatrechner zu Hause schafft so im Schnitt 4000 – 7000 Datensätze, der Rechner in meinem Büro schmiert meisten schon nach etwa 1000 Datensätzen ab.
Ich muss dann das Makro beenden und nach dem Speichern erneut starten. Im Büro passiert es auch ziemlich häufig, dass Excel komplett abschmiert, automatisch beendet wird und ich nicht mal mehr speichern kann.
Ist ziemlich lästig und daher wollte ich einmal bei euch nachfragen, ob jemand weiß, woran das liegen könnte.
Beispieldatei:
https://www.herber.de/bbs/user/153078.xlsm
Bin für jeden Tipp dankbar.
Liebe Grüße
Klaus Maier

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro-Schleife Laufzeitfehler 28
15.05.2022 10:11:18
Fennek
Hallo,
Nach einer kurzen Prüfung vermute ich, dass der recursive Aufruf der sub die Ursache für den Stapelüberlauf ist.
Mfg
AW: Makro-Schleife Laufzeitfehler 28
15.05.2022 10:16:57
Klaus
Hallo Fennek,
danke für deine Rückmeldung; dachte mir auch schon was in dieser Richtung.
Hast du eine Idee, wie man die Schleife so umbauen müsste, dass dies vermieden wird.
Danke
Klaus
AW: Makro-Schleife Laufzeitfehler 28
15.05.2022 11:11:36
onur
Es verursacht echt Kopfschmerzen, so einen Code zu analysieren.
Du solltest alle Selects wegmachen. Select braucht nur der Makrorecorder, weil er alles aufzeichnet, so wie man mit Excel arbeitet (Zelle auswählen, irgendwas damit machen, nächste auswählen usw usw), aber nicht VBA. Selbst Copy und Paste ist nicht zwingend notwendig, du kannst direkt den Inhalt einer Zelle in eine andere schreiben, ohne ihn vorher zwischenzuspeichern.
Wenn du das alles gemacht hast, ist auch der Code übersichtlicher und du siehst sofort warum, falls der Code immer noch Probleme machen sollte.
Anzeige
AW: Makro-Schleife Laufzeitfehler 28
15.05.2022 19:37:29
Klaus
Besten Dank für deine Rückmeldung und sorry wegen der Kopfschmerzen.
Klaus
AW: Makro-Schleife Laufzeitfehler 28
15.05.2022 11:16:06
Fennek
Hallo,
ich würde alles in VBA erledigen. Der erste Ansatz wäre:

Sub F_en()
Dim Anz As Integer, lr As Long
lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = lr To 2 Step -1
Anz = Cells(i, 4) - 1
Rows(i).Offset(1).Resize(Anz).Insert xlDown, xlFormatFromLeftOrAbove
Range(Cells(i, 1), Cells(i, 2)).Copy Cells(i, 1).Resize(Anz + 1)
Cells(i, 4).DataSeries xlColumns, xlDataSeriesLinear, xlDay, -1, 1, False
Next
End Sub
Für die anderen Spalten müsstest Du es ergänzen.
mfg
PS setze auf "Next" einen Breakpoint umd an einer Zeile die Wirkung zu sehen
Anzeige
AW: Makro-Schleife Laufzeitfehler 28
15.05.2022 11:02:52
Oberschlumpf
Hi Klaus
dein Code ist eine Endlosschleife.
Warum?
Weil...

Do
i = i + 1
Z_TEIL = ActiveCell.Value
If ActiveCell.Value = "" Then
Exit Sub
End If
If Z_TEIL = 1 Then
'...hier dein Code, wenn Z_TEIL = 1
'am Ende dieses Codeabschnitts kommt
Application.Run ("FBRD_Schleife")
'der ganze Code wird von Beginn an gestartet; der Code "erreicht" nicht mal die LOOP-Zeile, wo steht: Aufhören (Loop) wenn Z_TEIL = 1
End If
If Z_TEIL > 1 Then
'...hier dein Code, wenn Z_TEIL > 1
'am Ende dieses Codeabschnitts wiederholt der Code wieder bei DO, weil ja LOOP Until Z_TEIL = 1 nicht greift, weil Z_TEIL > 1
End If
Loop Until Z_TEIL = 1
'würde man bei If Z_TEIL = 1 Then die Zeile Application.Run ("FBRD_Schleife") löschen, dann wird zwar die LOOP-Zeile "erreicht",
'aber was kommt nach Ausstieg aus Do/Loop? = schon wieder Application.Run ("FBRD_Schleife"),
'und alles beginnt von vorn; deswegen: Endlosschleife = hier kommst du nich mehr raus!^^ :-)
Application.Run ("FBRD_Schleife")
Aber WIE man das ändern kann, weiß ich leider (noch) nicht, und ich bin auch nich sicher, ob mir dazu was einfällt.
Ich wollt nur versuchen, so weit zu helfen, dass du im Detail erkennen kannst, wo der Fehler ist.
Sorry, meine Erklärungen sind hier etwas schwer zu lesen.
Vielleicht kopierst du den schwarzen Text und fügst ihn im VBA-Editor ein.
Die Kommentarzeilen, beginnend mit ' werden dann grün gefärbt.
Vielleicht ists dann übersichtlicher
Ciao
Thorsten
Anzeige
AW: Makro-Schleife Laufzeitfehler 28
15.05.2022 19:42:35
Klaus
Herzlichen Dank Thorsten,
LG
AW: sorry, falsche spalte
15.05.2022 11:17:30
Fennek
Hallo,
ich würde alles in VBA erledigen. Der erste Ansatz wäre:

Sub F_en()
Dim Anz As Integer, lr As Long
lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = lr To 2 Step -1
Anz = Cells(i, 4) - 1
Rows(i).Offset(1).Resize(Anz).Insert xlDown, xlFormatFromLeftOrAbove
Range(Cells(i, 1), Cells(i, 2)).Copy Cells(i, 1).Resize(Anz + 1)
Cells(i, 4).DataSeries xlColumns, xlDataSeriesLinear, xlDay, -1, 1, False
Next
End Sub
Für die anderen Spalten müsstest Du es ergänzen.
mfg
AW: sorry, falsche spalte
15.05.2022 19:41:08
Klaus
Danke nochmal Fennek,
war heute den ganzen Tag unterwegs und werde mich, soweit's die Zeit erlaubt, die kommenden Tage mit deinen Tipps auseinandersetzen.
LG
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige