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

Makrolaufzeit verkürzen

Makrolaufzeit verkürzen
01.04.2021 12:45:46
reiner
Hallo Leute,
https://www.herber.de/bbs/user/145246.xlsb
Userbild
das Makro in der Beispielmappe funktioniert, aber die Bearbeitung dauert extrem lange (sh. Zelle "Y1") 1.010 Sekunden. Mir ist aufgefallen dass bei der Bearbeitung der Prozedur "Monatskalen-der" insgesamt 10.501 mal die Prozedur "dgmond" im Modul "SonnenMond_Berechnungen" aufgerufen wird, wodurch wohl die extrem lange Bearbeitungszeit resultiert. Das Makro startet nach Betätigung der roten Schaltfläche "Aktuelles Jahr (Tag)" und baut einen Kalender mit 3-Monatsansicht -beginnend mit dem 01.Oktober des Vorjahres und endet nach 18 Monaten am 31.03. des Folgejahres- auf. Dabei werden an jedem Tag die Auf-und Untergangszeiten von Sonne und Mond errechnet und als Kommentar dem jeweiligen Tag hinzugefügt. Weiterhin werden Ereignisse wie Geburtstage und andere jährlich wiederkehrende Ereignisse, wie Beginn der Jah-reszeiten und Feiertage sowie Mondphasen hinzugefügt. Aufgrund der Größenbeschränkung auf 300 kB musste das Makro um einige Codezeilen reduziert werden, aber das Problem ist geblie-ben.
In der ursprünglichen Version dieses Kalenders gab es ein weiteres Tabellenblatt mit allen Ein-trägen die jetzt beginnend mit Spalte BA und folgend auf dem einzigen verbliebenen Tabellen-blatt eingetragen sind. In der alten Version dauerte die Bearbeitung ca. 150 Sekunden, während der Bearbeitung der Prozedur "Monatskalender" wurde insgesamt ca. 1.110 mal die Prozedur "dgmond" im Modul "SonnenMond_Berechnungen" aufgerufen, also deutlich weniger Aufrufe als jetzt. Wegen des ständigen Wechsels von einem auf das andere Tabellenblatt (während der Makrobearbeitung) habe ich auf das zweite Tabellenblatt verzichtet in der Hoffnung, dass sich die Bearbeitungszeit dadurch verkürzt, aber jetzt ist das Gegenteil der Fall!!!
Es stellt sich die Frage: Warum wird die Prozedur "dgmond" 10.501 mal aufgerufen und wie lässt sich die Anzahl dieser Aufrufe erheblich reduzieren im Interesse einer schnelleren Bearbeitung was ja, wie beschrieben, in der ursprünglichen Version möglich ist?
mfG
reiner

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makrolaufzeit verkürzen
01.04.2021 14:04:01
Klaus
Hallo Reiner,
das Makro ist hoffentlich nicht von dir, oder? Ich habe jetzt vielleicht 10 sekunden rein geschaut und, völlig ohne Kontext, sehe ich Konstrukte wie dieses:
   range("D5").Select 'Montag
SpalteFormatieren
range("D3:D" & Letztezeile).Select
Selection.ColumnWidth = 13
range("G5").Select 'Dienstag
SpalteFormatieren
range("G3:G" & Letztezeile).Select
Selection.ColumnWidth = 13
range("J5").Select 'Mittwoch
SpalteFormatieren
range("J3:J" & Letztezeile).Select
Selection.ColumnWidth = 13
... die sich ewig fortsetzen. Ohne irgendwem zu nahe treten zu wollen - das gesamte Makro ist einfach mies geschrieben. Ohne Ende Select, unnötige Codewiederholung, unstetige und nicht nachvollziehbare Variablenbezeichnung usw...
Sorry, da habe ich gar keine Lust mehr weiter drin abzutauschen und im Detail zu schauen. Meine Meinung: Das ganze (!!!) Makro gehört von einem Profi komplett überarbeitet, neu schreiben wäre wahrscheinlich sogar einfacher.
Ich lasse mal offen, vielleicht hat jemand der sich "eh" mit dem Sonne-Mond-Sterne Thema beschäftigt mehr Muße als ich.
LG,
Klaus M.

Anzeige
AW: Makrolaufzeit verkürzen
01.04.2021 14:16:17
Daniel
Hi
ohne mich da länger mit beschäftigt zu haben:
1. entferne die Programmzeilen mit Application.Wait.
wenn das Makro eh schon langsam läuft, warum dann dem Anwender zusätzliche unnötige Wartezeigen aufbürden?
2. Progarmmiere Select-Frei
aus
Zellbereich.Select
Selection.Befehl

wird
Zellbereich.Befehl

ist nicht nur kürzer, sondern auch viel schneller.
weitere Infos dazu hier: https://online-excel.de/excel/singsel_vba.php?f=78
3. jede Änderung, die das Makro auf dem Blatt ausführt, startet das Change-Eventmakro. Wenn dessen Ausführung dann nicht notwendig ist, kannst du die automatische Ausführung der Event-Makros mit diesem Befehl unterbinden:
Application.EnableEvents = False

danach werden die automatischen EventMakros wie Change nicht mehr ausgeführt.
am Ende solltest du sie jedoch wieder einschalten:
Application.EnableEvents = True

da die gemachte Einstellung bei Makroende erhalten bleibt und so u.U. die Datei nicht mehr richtig auf manuelle Änderungen reagiert.
das solltest du erstmal umsetzen und schauen, obs was bringt.
Gruß Daniel

Anzeige
AW: Makrolaufzeit verkürzen
01.04.2021 16:16:25
reiner
Hallo,
der Tipp mit "Application.EnableEvents = False" hat weitergeholfen, nun läuft das Makro in 37 Sekunden ab, das ist ein sehr gutes Ergebnis
reiner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige