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

Performanceverlust durch neues Modul

Performanceverlust durch neues Modul
06.03.2017 12:25:28
Burkhard
Für ein bestehendes Excel-VBA-Projekt habe ich ein paar neue Funktionen geschrieben und diese in einem Test-Excel-File ausgetestet. Die neue .bas-Datei (nennen wir sie mal Modul B) habe ich exportiert und in das bestehende Projekt importiert. (Zwei neue UserForms waren auch noch nötig.)
Nun kommt es zu dem Phänomen, dass in dem Projekt eine alte, unveränderte Funktion in dem alten, unveränderten - nennen wir es mal so - Modul A, die direkt aus Workbook_Open() aufgerufen wird, deutlich langsamer läuft als vorher.
Von Modul A werden keine Funktionen in Modul B aufgerufen (die waren ja bisher nicht vorhanden), wohl aber andersherum. Modul B verwendet "Option explicit", Modul A nicht. In Modul B ist eine Reihe zusätzlicher globaler Variablen und Konstanten definiert.
Der Performanceeinbruch findet im alten Code in einer etwas komplizierten Schleife statt. Vor der Erweiterung um Modul B dauerte ein Schleifendurchlauf 0,04 Sekunden, danach 0,11 Sekunden - das ist fast das dreifache. Da diese Schleife mehrere hundert mal durchlaufen wird, macht sich das durchaus unangenehm bemerkbar ...
Kann mir jemand einen Tipp geben, warum der unveränderte alte Code auf einmal langsamer läuft? Und vielleicht auch, was man dagegen unternehmen kann?
Vielen Dank schon mal ...

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Performanceverlust durch neues Modul
06.03.2017 13:01:00
ChrisL
Hi Burkhard
Vielleicht stösst die Schleife mehrmals die Neuberechnung der Mappe und damit die Ausführung deiner "Funktion" an.
Oder die Mappe ist einfach "überladen"...
cu
Chris
AW: Performanceverlust durch neues Modul
06.03.2017 13:38:07
Burkhard
Hi Chris,
vor der Schleife in Modul A wird ganz brav Application.ScreenUpdating, .EnableEvents und auch .Calculation abgeschaltet. Fehlt da etwas in dieser Liste?
Aber selbst wenn in der Schleife eine Neuberechnung angestoßen werden sollte - wie kann dadurch Code aus Modul B ausgeführt werden? Da Modul A ja nicht verändert wurde, kann das ja wohl nur über einen Trigger passieren; die Funktionen/Subs im neuen Modul B werden aber ausschließlich über ein eigenes Menü aufgerufen, bzw. von anderen Funktionen/Subs innerhalb von Modul B.
Das sheet ist zugegebenermaßen schon ziemlich vollgestopft. Aber das hat ohne die Existenz von Modul B ja auch nichts ausgemacht.
cu
Burkhard
Anzeige
AW: Performanceverlust durch neues Modul
06.03.2017 13:59:43
ChrisL
Hi Burkhard
Die Zusammenhänge der Module und Funktionen kenne ich natürlich nicht. Calculation etc. hört sich eigentlich OK an. Allerdings hilft dies bei volatilen VBA-Funktionen nicht.
Zelle X1 = =eintest()
Sub t()
Application.Calculation = xlCalculationManual
Range("A1") = "y"
Application.Calculation = xlCalculationAutomatic
End Sub

Function eintest() As String
eintest = "x"
MsgBox "adfaf"
End Function
Die Funktion wird trotz manueller Berechnung ausgeführt. Kannst ja mal Testen...
Ansonsten stelle die Frage wieder auf offen. Vielleicht gibt es noch andere Ideen, aber ohne Beispieldatei zur Analyse wird es schwierig.
cu
Chris
Anzeige
AW: Performanceverlust durch neues Modul
06.03.2017 16:05:23
Burkhard
Hi Chris,
du gehst von einer falschen Voraussetzung aus: die Zelle X1 müsste ja eine Funktion im Modul B aufrufen (bei dir: eintest()). Da das komplette worksheet inhaltlich nicht geändert wurde, gibt es keine Zelle, die so etwas tut.
Als "Beispieldatei" kann m.E. eigentlich nur die komplette Excel-Datei ("das Projekt") fungieren, und die kann ich aus Datenschutzgründen nicht weitergeben.
Vielleicht kann mir jemand einen Tipp geben, worauf ich beim Debuggen dieser Mammut-Schleife besonders achten sollte.
Oder vielleicht hat jemand noch eine ganz andere, geniale Idee ....
cu
Burkhard
Anzeige
AW: Performanceverlust durch neues Modul
06.03.2017 19:06:44
ChrisL
Hi nochmal
Die Datei müsste man anonymisieren können, allerdings habe ich auch nicht die Zeit, um ein grösseres Projekt zu analysieren, aber evtl. wäre etwas besonders aufgefallen.
Vielleicht müsste man tatsächlich bei der Schleife ansetzen. Wobei es eher darum ginge die Schleife ganz zu vermeiden resp. mit Array o.ä. zu optimieren. Vielleicht kannst du die Schleife in einer Beispieldatei darstellen, so dass Zweck inkl. Details wie Sortierung etc. erkennbar sind.
cu
Chris
AW: Performanceverlust durch neues Modul
08.03.2017 12:25:17
Burkhard
Hallo,
ich hatte jetzt die Faxen dick und habe testweise Modul B (und die beiden Userforms) wieder rausgeworfen. Das Verblüffende ist: der Code läuft nach wie vor langsam! Ja wie gibt's das denn?
Inzwischen habe ich von einer Kollegin erfahren, bei der ebenfalls die Bremse angezogen ist - deren Excel-Datei aber noch nie etwas von Modul B gesehen hat. Ich würde daraus den kühnen Schluss ziehen, dass Modul B gänzlich unschuldig ist an der ganzen Misere. Würdet ihr mir da zustimmen?
Aber wer dann? Der Gärtner?
Grüße
Burkhard
Anzeige
AW: Performanceverlust durch neues Modul
08.03.2017 12:29:44
onur
Hast du meine Frage im Thread gelesen?
AW: Performanceverlust durch neues Modul
08.03.2017 13:34:45
Burkhard
Hallo onur,
habe deine Frage (vom 06.03.2017 23:28:47) gelesen; die dürfte aber durch meinen Rauswurf (08.03.2017 12:25:17) beantwortet sein - oder siehst du das anders?
Grüße
Burkhard
AW: Performanceverlust durch neues Modul
08.03.2017 14:12:40
onur
Sorry, die antworten, die ja nicht an mich gerichtet waren, habe ich nur grob überflogen.
Ich habe bemerkt, dass excel manchmal spinnt und eine datei, die sonst einwandfrei lief, auf einmal rumspinnt, sich aufhängt oder total langsam wird.
Keine Ahnung, warum (vielleicht beim speichern), aber abhilfe bringt meistens, wenn man die blätter und die module (evtl. durch export/import) in eine neue leere datei übernimmt und mit dieser weiterarbeitet.
Anzeige
AW: Performanceverlust durch neues Modul
06.03.2017 23:28:47
onur
Hi,
Teste doch mal die geschwindigkeit, wenn du globale variable und konstanten in modul 2 vermeidest (notfalls auf dem blatt zwischenspeichern und von da übergeben).

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige