Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1696to1700
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

Bildschirm wird während Makro nicht upgedatet

Bildschirm wird während Makro nicht upgedatet
17.06.2019 13:24:09
Player2Ben
Hallo,
ich durchlaufe mit einem Makro Zeile für Zeile und lasse mir währenddessen einen Ladebalken in der Statusleiste anzeigen. Das funktioniert auch soweit.
Aber nach einiger Zeit bleibt der Bildschirm hängen/friert ein. Das passiert manchmal nach 6sec, mal nach 11sec. Immer unterschiedlich. Das Makro läuft aber durch und zeigt dann auch wieder alles normal an.
Ist das bei euch auch so?
Kann ich das irgendwie verhindern? Oder läuft das Makro einfach zu lange?
Sub test()
Dim i As Long
Dim max As Long
max = 3000000
For i = 1 To max
Statusbalken i, max, True
Next
Statusbalken 1, -1 'ausschalten
End Sub
Sub Statusbalken(wert, max, Optional proz = False)
' wert = aktueller Fortschritt
' max = maximaler Wert (100%)
' wenn max 0 Then
P = wert / max * maxbreite
If proz Then Mess = Format(wert / max, "00% ")
Mess = Mess & String(P, ChrW(&H25A5)) & String(maxbreite - P, ChrW(&H25A2))
If Application.StatusBar  Mess Then Application.StatusBar = Mess
Else
Application.StatusBar = False
End If
End Sub
Gruß
Ben

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bildschirm wird während Makro nicht upgedatet
17.06.2019 13:33:21
Daniel
HI
scheint ein Bug in den aktuellen Versionen zu sein.
Irgendwann ist Excel zu beschäftigt um sich beim Betriebssytsem zu melden und wird als "abgestürzt" erkannt, obwohl es im Hintergrund normal weiter arbeitet.
Gruß Daniel
...falsch
17.06.2019 13:36:24
Martin
Hallo Daniel,
nein, das betrifft auch schon die ganzen alten Excel-Versionen (2000, 2002, 2003,usw.).
Auch Ben arbeitet mit einer älteren Excel-Version (2010).
Viele Grüße
Martin
AW: Bildschirm wird während Makro nicht upgedatet
17.06.2019 13:34:04
Martin
Hallo Ben,
ich glaube, dass dieses Phänomen bei zu vielen aufeinanderfolgenden Statusbalken-Anweisungen hintereinander in zu kurzer Zeit auftritt. Baue mal einen Step in deine Schleife ein (ggf. noch etwas höher setzen):
For i = 1 To max Step 10
Statusbalken i, max, True
Next
Viele Grüße
Martin
Anzeige
AW: Bildschirm wird während Makro nicht upgedatet
17.06.2019 13:40:01
Daniel
Hi - bei mir läuft das reine Balkenmakro sauber durch. Das Problem entsteht wohl erst, wenn ein anderes Makro länger läuft, da das Fenster dann ja tatsächlich für den Rest der Zeit "einfriert". Denke also nicht, dass ein Step 10 viel bewirken wird. Das Makro hier an sich ist wohl nicht das Problem.
Grüße
Daniel
AW: Bildschirm wird während Makro nicht upgedatet
17.06.2019 13:46:35
Martin
Hallo Daniel,
ja, im Nachgang war mir mein Denkfehler auch aufgefallen. Der Step springt ja nur, eigentlich wollte ich die Schleife durchlaufen lassen und nur aller 10 Schleifendurchläufe die Statusbar-Anweisung senden.
Viele Grüße
Martin
Die ultimative Lösung :-)
17.06.2019 17:39:40
mmat
Hallo,
das Phänomen kenn ich, das passiert mir auch, auch wenn ich in der Regel nur eine Zeilennummer auf der Statusleiste ausgebe.
Die Ausgabe auf der Statuszeile ist ein Performancefresser, man sollte dies tunlichst vermeiden. Zudem verabschiedet sich Excel bei umfangreichen Berechnungen immer wieder gerne mal in den Hintergrund. Daher hab ich in das Ding eine Abfrage eingebaut, die dafür sorgt, dass die Statuszeile nur dann aktualisiert wenn p sich geändert hat. Damit läuft der Balken auch bei mir sauber durch, was vorher nicht der Fall war. Falls das nicht reicht, kann man die Zeile mir dem "doevents" aktivieren (derzeit auskommentiert) und in sinnvollen Intervallen ein "doevents" einstreuen (auch das frisst viel Performance)
Option Explicit
Dim OldValue As Long
Sub test()
Dim i As Long, max As Long
max = 3000000: OldValue = 0
For i = 1 To max
Statusbalken i, max, True
Next
Statusbalken 1, -1 'ausschalten
End Sub
Sub Statusbalken(wert, max, Optional proz = False)
' wert = aktueller Fortschritt
' max = maximaler Wert (100%)
' wenn max 0 Then
p = wert / max * maxbreite
If p > OldValue Then
OldValue = p
Mess = String(p, ChrW(&H25A5)) & String(maxbreite - p, ChrW(&H25A2))
If proz Then Mess = Format(wert / max, "00% ") + Mess
Application.Statusbar = Mess
End If
'If (wert Mod 100 = 0) Then DoEvents
Else
Application.Statusbar = False
End If
End Sub

Anzeige
AW: Die ultimative Lösung :-)
18.06.2019 08:20:32
Player2Ben
@mmat
hat erstmal nicht wirklich eine Besserung gebracht, aber mit dem Doevent läuft es sauber durch.
Vielen Dank
Danke für die Rückmeldung.
18.06.2019 09:40:35
mmat
Hallo Ben,
das Verhalten hängt stark davon ab, was sonst noch so läuft. Eine Schleife die einfach bis 3000000 höchzählt ist was anderes wie eine komplexe Berechnung oder das Ausfüllen von Tabellen im Hintergrund.
Mit dem doevent wird's immer irgendwie sauber durchlaufen, nur leider frisst der auch einiges an Rechenzeit.
vg, MM

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige