Clever-Excel-Forum

Normale Version: Application.StatusBar deutlich verlangsamt in Excel 2016
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Wenn Du mal das richtige Makro posten würdest, könnte man ja mal da ansetzen.
Vielleicht ist eine wie auch immer geartete Fortschrittsanzeige dann obsolet...
Das richtige Makro ist halt sehr lang. Und mit Sicherheit ist eine StatusBar nicht erforderlich. Eher ein Nice-to-have.

Ich habe auch festgestellt, dass es nicht nur die StatusBar ist. Selbst das folgende Makro führt zu längeren Laufzeiten unter Excel 2016:

Sub test()
   t = Now
   For i = 1 To 500000000
      l = i
   Next i
   Cells(1, 1) = Format(Now - t, "hh:mm:ss:ms")
End Sub

Läuft bei mir so:

Excel 2010
Windows 7, i7, 2,6GHz, 2 Kerne, 4 logische Prozessoren
5 Sekunden

Excel 2016
Windows 10, i5, 1,7GHz, 4 Kerne, 8 logische Prozessoren
8 Sekunden


Meiner Meinung nach kann das nicht richtig sein.
Hi

Zitat:Meiner Meinung nach kann das nicht richtig sein.

Warum nicht?  Zeit und Takt Unterschied der PC passen doch ganz gut zusammen.

____|______A_____|_____B____|_________C_________|_D|_E|_F|_G|_H|_I|_J|_K|
   1|Takt in GHz |Zeit in s |Takt Gesamt in GHz |  |  |  |  |  |  |  |  |
   2|         2,6|         5|                 13|  |  |  |  |  |  |  |  |
   3|         1,7|         8|               13,6|  |  |  |  |  |  |  |  |
   4|            |          |                   |  |  |  |  |  |  |  |  |
   5|         2,6|      5,15|              13,39|  |  |  |  |  |  |  |  |
   6|         1,7|      7,88|             13,396|  |  |  |  |  |  |  |  |


Gruß Elex
Ich möchte Elex zwar nicht widersprechen, aber:
Die Zeiten, dass ein Prozessortakt etwas über die Geschwindigkeit ausgesagt hat, sind lange vorbei.
Auch wenn Excel (nicht VBA!) prinzipiell multiprozessorfähig ist, kann niemand von uns unter die Haube schauen.

Und drittens: Selbst wenn ein Makro auf zwei Maschinen mit identischem Prozessor läuft, kann es extreme Unterschiede geben!
Schließlich kommt ja noch "ein winziges bisschen" dazu, was den Prozessor beschäftigt.

Abschließend @Kieks:
Du willst Dein Makro also nicht vorstellen, musst Du ja auch nicht!
Genauso wenig wie dies analysiert werden könnte, wenn jemand Zeit und Lust hat.

Aber dann verschone das Forum doch bitte mit Fragen mit solch seltsamer Belanglosigkeit (oder besser Beliebigkeit)!

Gruß Ralf
Hallo,

ich habe vor Jahrenden schon aufgegeben, in bzw. für die Statusbar zu programmieren.
Kein User ... und ich wohl am allerwenigsten ... habe(n) wirklich wahrgenommen, was da abläuft.
Mein Fazit: "Das ist den Aufwand nicht wert"
Hallo Ralf,

zu
Zitat:Die Zeiten, dass ein Prozessortakt etwas über die Geschwindigkeit ausgesagt hat, sind lange vorbei.


Welche Physik gibt es denn in deiner Welt? Da VBA-Programme jederzeit nur einen Kern nutzen können, gilt Elex Aussage uneingeschränkt in meiner Welt.
Moin Helmut!
(15.10.2019, 18:48)Ego schrieb: [ -> ]Welche Physik gibt es denn in deiner Welt?

Es geht nicht um meine Welt.
Es geht auch nicht um Physik, sondern um die Prozessor-Architektur.
Der Takt ist (und da wiederhole ich mich) bereits seit längerem nachrangig.

Meinen Satz mit Excel und VBA hast Du auch nicht verstanden.
Reines(!) VBA nutzt nur einen Kern.
Wie es mit durch VBA angestoßene Excel-Funktion(alität)en aussieht, wissen wir schlicht nicht und müssten einen Blick unter besagte Haube werfen können, was uns allerdings nicht möglich ist.

Zitat:gilt Elex Aussage uneingeschränkt in meiner Welt
Schon wieder eine Welt … Wink
Da es Zellzugriffe gibt, ist es kein "reines" VBA mehr.

Deshalb habe ich ja auch den gesamten Code angefordert, um Optimierungspotential zu suchen.

Aber der TE will ja nicht …

Gruß Ralf
Hallo Ralf,

so ganz kann ich nicht nachvollziehen, warum du mich so angehst. In der Regel wünscht sich ein Forum ja ein Minimalbeispiel anstelle eines ganzen Codes. In meinem Fall ist der Code und die Excel-Datei sehr komplex und zudem nicht für die Öffentlichkeit gedacht.

Das mit dem Takt habe ich jetzt verstanden. Dadurch ist es logisch, dass mein Code aus Post #12, der nur reines VBA und damit nur einen Kern nutzt, etwas langsamer wird. Danke für die Erklärung!

Warum aber mein Minimalbeispiel aus dem ersten Post bei mir die 5-fache Zeit benötigt, konnte mir hier bisher keiner beantworten. Bei Guschti sieht die Performance auch deutlich besser aus. Deshalb war meine Idee, dass es irgendwie mit diesem Bug zusammenhängt (Post #7). 

Dass man eine Anzeige in der Statusbar auch weglassen kann, ist natürlich richtig. Aber mich würde schon interessieren, wie andere sich dann den Fortschritt eines Makros anzeigen lassen. Oder würdet ihr sagen, dass es keine Aufgabe gibt, für die Excel länger als ein paar Sekunden brauchen sollte?
Da du den Code nicht posten willst, hier mal eine Laufzeit-Übersicht (10 Durchläufe) für "Deinen" geposteten Code
Bei der linken Spalte ist nichts abgeschaltet (TurnOffunctionality war da auskommentiert), bei der rechten Spalte ist alles abgeschaltet.
Darüber solltest Du Dir Gedanken machen und nicht warum die Bildschirmanzeige beim "neuen" Excel so lahm ist.
Und, sorry to say, wer seinen Code nicht mal in Code-Tags unterbringen kann, da vermute ich noch ganz andere Klopfer (wie Select, Activate ...)  im so komplexen Code



PHP-Code:
3,985    0,093
3
,968    0,078
4        0
,094
4
,094    0,094
4
,047    0,094
4
,109    0,093
4
,079    0,079
4
,171    0,093
4
,157    0,094
4
,312    0,078 


Code:
   Option Explicit
   Public Declare Function GetTickCount Lib "kernel32.dll" () As Long

   Sub test()
       Dim starttime As Long
       Dim timeelapsed As Long
       Dim i As Long, l As Long, k As Long
       TurnOffFunctionality
       For k = 1 To 10
       
           starttime = GetTickCount()
                           
           For i = 1 To 5000
           'For i = 1 To 500000000
               Application.StatusBar = i
               l = i
           Next i
       
           timeelapsed = (GetTickCount() - starttime)
           Cells(k, 2).Value = timeelapsed / 1000
           
       Next k
       TurnOnFunctionality
   End Sub


   Private Sub TurnOffFunctionality()
       Application.Calculation = xlCalculationManual
       Application.DisplayStatusBar = False
       Application.EnableEvents = False
       Application.ScreenUpdating = False
   End Sub

   Private Sub TurnOnFunctionality()
       Application.Calculation = xlCalculationAutomatic
       Application.DisplayStatusBar = True
       Application.EnableEvents = True
       Application.ScreenUpdating = True
   End Sub
PS Käpt'n Blaubär hat es in #15 freundlicher formuliert Confused
Hier gesammelte Hinweise, um die Performance zu verbessern.
Oder mit anderen Worten, Dein Makro sollte so schnell sein, dass Fortschritts-Hinweise an den User überflüssig sind.
Seiten: 1 2 3