Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Application.StatusBar deutlich verlangsamt in Excel 2016
#11
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...
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#12
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.
Antworten Top
#13
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
Antworten Top
#14
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#15
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"
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#16
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.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#17
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#18
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?
Antworten Top
#19
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
Antworten Top
#20
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.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste