Miese Performance bei Makrokombination
Alex
Ich befasse mich momentan mit einem VBA-Projekt, das bis zu 5 Städte, die man für eine Rundroute ansteuern will, in die Reihenfolge bringt, die mit der kürzesten Gesamtstrecke verbunden ist. Dabei arbeite ich vor allem viel mit Laufvariablen, die abgleichen sollen, welche Städte gewählt wurden und die dann die dazugehörigen Strecken mittels Vektorrechnung in Luftlinie errechnen und ausgeben.
Ein weiteres Sub kombiniert dann die Teilstrecken zwischen den Städten zu einer optimalen Gesamtlänge und gibt dann, je nach fall, eine Prioritätenliste aus.
Bis zur Kombination von 5 ausgewählten Städten funktioniert alles super. Dann dauert es zwar etwas, aber es geht. Sobald man allerdings eine fünfte Stadt auswählt, schmiert er zwischendurch ab. Manchmal fängt er sich dann noch, immer öfter aber nicht.
Ich habe schon versucht, in den einzelnen angesteuerten Subs mit End-Befehlen zu arbeiten, um unnötigen Code zu stoppen. Das hat allerdings leider keine Auswirkungen :c
Wenn ich den Code per Esc abbreche, hängt er immer am letzten End If fest:
"For St5 = 7 To 40
If Me.comSt1 = Sheets("Daten").Cells(St1, 2) And Me.comSt2 = Sheets("Daten").Cells(St2, 2) And Me.comSt3 = Sheets("Daten").Cells(St3, 2) And Me.comSt4 = Sheets("Daten").Cells(St4, 2) And Me.comSt5 = Sheets("Daten").Cells(St5, 2) And Me.comSt6 = "-" Then
Rechnung5St
End If"
klar, 5 variablen von 7 bis 40 sind schon ne Menge, ich hatte jedoch gehofft, dass sich das verrechnen lässt.
Für alle, die sich damit auskennen und evtl. den ein oder anderen Tipp für mich parat haben, wie ich das ganze etwas "schlanker" gestalten kann, hier der Code.
Ist relativ Anfängerhaft geschrieben, was aber auch daran liegt, dass ich vor 2 Wochen mit Excel VBA angefangen habe.
Vielen Dank für's Lesen
PS: Wenn ich die Subs als public deklariere und über den Sub/Userform-ausführen Befehl einzeln ansteuere, funktioniert alles in Sekundenschnelle - er scheint also offensichtlich ein Problem mit
a) der Kombination mehrerer Subs
b) den vielen Variablen auf einmal oder
c) dem Routing auf einen Knopf
zu haben.
Ich hoffe, dass jemand von Euch dieses Problem auch schonmal hatte und einen Lösungsvorschlag hat.
Das komplette Programm ist im Anhang.
Die Prioritätenliste ist noch auf der Datenseite und wird noch nicht auf das Eingabeblatt übertragen.
https://www.herber.de/bbs/user/72607.xlsm