Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
1832to1836
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

Anzeigeaktualisierung

Anzeigeaktualisierung
01.06.2021 19:47:57
Dieter
Moin zusammen,
in einer Schleife will ich den Fortschritt durch Einblenden des Schleifenzähler auf einem Arbeitsblatt darstellen. Um die Schleife schnell zu machen, setze ich diese Prozedur ein:

Sub Gnl_BckOff()
With Application
.ScreenUpdating = False
.Cursor = xlWait
.DisplayAlerts = False
.EnableEvents = False
.DisplayStatusBar = False
.Calculation = xlCalculationManual
End With
End Sub
Damit der aktuelle Schleifenzähler sichtbar wird, setze ich diese Prozedur ein:

Sub Gnl_BckOff()
With Application
.ScreenUpdating = False
.Cursor = xlWait
.DisplayAlerts = False
.EnableEvents = False
.DisplayStatusBar = False
.Calculation = xlCalculationManual
End With
End Sub
gefolgt von Gnl_BckOff. Das führt nicht zu dem gewüschten Erfolg.
Wer von Euch hat eine Idee?
Schon jetzt Danke
Dieter

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

Betreff
Datum
Anwender
Anzeige
AW: Anzeigeaktualisierung
01.06.2021 19:52:44
Dieter
Sorry, die zweite Prozedur muss heißen:

Sub Gnl_BckOn()
With Application
.ScreenUpdating = True
.Cursor = xlNormal
.DisplayAlerts = True
.EnableEvents = True
.DisplayStatusBar = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Sorry
Dieter
AW: Anzeigeaktualisierung
01.06.2021 20:15:35
ralf_b
Screenupdating ausschalten und etwas auf dem Screen ändern ,das passt irgendwie nicht wirklich .oder was meinste ?
AW: Anzeigeaktualisierung
01.06.2021 20:38:30
Dieter
Vielleicht fehlt noch diese Info:

Sub xyz()
Gnl_BckOff
code ...
For I = 1 to 50
'Das Makro sendet den Wert von I an das Arbeitsblatt
Gnl_BckOn 'aktiviert Hintergrundaktivitäten, u.a. die Anzeige von I als Fortschrittsindikator
'I sollte an der entsprechenden Stelle der Arbeitsblattes erscheinen
Gnl_BckOff ' deaktiviert die Hintergrundaktiviten für schnelleren Ablauf des code
code ...
Next I
code
Gnl_BckOn
End Sub
Damit ist das ScreenUpdating für eine kurze Zeit aktiviert, um I anzeigen zu können.
Das sollte funktionieren.
Dieter
Anzeige
AW: Anzeigeaktualisierung
01.06.2021 20:27:14
Daniel
Hi
1. wenn das deine Schleife signifikant schneller macht, dann hat dein Code noch Optimierungspotential, daran solltest du zuerst arbeiten.
2. der einfachste Weg den Fortschritt einer Schleife anzuzeigen ist die Statusleiste um unteren Fensterband.
Excel verwendet die für seine eigen System- und Fortschrittsmeldungen, man kann dort aber auch eigene Meldungen ausgeben.
Man sollte jedoch nicht vergessen, am Ende die Statusleiste wieder für Excel freizugeben.

For i = 1 to 10
Application.Statusbar = "Schritt "  & i & " von 10"
Application.Wait Now + TimeSerial(0, 0, 1)
Next
Application.Statusbar = false
Die Anzeige in der Statusleiste funktioniert auch bei deaktivierter Bildschirmaktualisierung.
Die Statusleiste muss natürlich aktiv sein.
Bei länger laufenden Prozessen kann es jedoch sein, dass Excel so beschäftigt ist, dass es vergisst sich beim Betriebssystem zu melden und dann scheinbar abstürtzt, obwohl es im.Hintergrund normal weiter läuft.
Gruß Daniel
Anzeige
AW: Anzeigeaktualisierung
01.06.2021 20:55:43
Dieter
Hi Daniel,
der Hinweis mit der Statuszeile ist gut, aber aus bestimmten Gründen (u.a. user) muss die Fortschrittsanzeige auf dem Arbeitsblatt erscheinen.
Zur grundsätzlichen Geschwindigkeit: Es findet ein umfangreicher und laufender Datenaustausch zwischen Makro und Arbeitsblatt statt, und die Daten des Arbeitsblatts können ohne massiven Verlust an Übersichtlichkeit im Code nicht komplett ins Makro übertragen werden, um dort berechnet und dann wieder in das Arbeitsblatt zurück geschrieben werden.
Alles ausprobiert, endete in einem Chaos, was die Lesbarkeit des Code angeht. Die Verwendung der beiden kleinen Prozeduren hat tatsächlich einen Geschwindigkeitsgewinn um den Faktor ca. 100 gebracht, und alles blieb unmittelbar verständlich.
Mir fehlt nur noch eine Lösung, die Schleifenvariable aktuell im Arbeitsblatt anzuzeigen.
Dieter
Anzeige
AW: Anzeigeaktualisierung
01.06.2021 21:28:45
Dieter
Moin zusammen,
Lösung gefunden:

Sub xyz()
Gnl_BckOff
code ...
For I = 1 to 50
'Das Makro sendet den Wert von I an das Arbeitsblatt
Gnl_BckOn 'aktiviert Hintergrundaktivitäten, u.a. die Anzeige von I als Fortschrittsindikator
zusätzlich eingefügt:
Application.wait (500) 'andere Werte ausprobieren
DoEvents
'I erscheint jetzt an der entsprechenden Stelle der Arbeitsblattes
Gnl_BckOff ' deaktiviert die Hintergrundaktiviten für schnelleren Ablauf des code
code ...
Next I
code
Gnl_BckOn
End Sub
Danke und Gute Nacht
Dieter
AW: Anzeigeaktualisierung
01.06.2021 22:06:59
Daniel
Hi
andere Möglichkeit:
füge für die Anzeige des Fortschritts ein neues leeres Blatt ein und aktiviere dieses.
dort zeigst du den Fortschritt an.
die Bildschirmaktualisierung kannst du jetzt generell an lassen, da die eigentliche Arbeit ja auf den nicht sichtbaren Blättern stattfindet und somit auch kein Bildschirm aktualisiert werden muss, somit ist dann diese Einstellung "egal".
das GnlBckOn/Off kannst du dann aus der Schleife rausnehmen und nur am Anfang und Ende des Makros ausführen.
dass du nicht mehr mit Select und Activate arbeitest sondern vollständig referenzierst, setze ich bei Excel - gut einfach mal voraus.
lediglich nach Befehlen sie Sheets.Add oder Sheets.Copy, Workbooks.Add oder Workbooks.Open müsstest du per Code wieder auf die Seite mit der Fortschrittsanzeige zurückspringen, weil diese Befehle das neue Tabellenblatt automatisch aktivieren.
Gruß Daniel
Anzeige
AW: Anzeigeaktualisierung
02.06.2021 12:58:53
Dieter
Moin Daniel,
für jemanden, der die Eigenheiten von Excel und VBA kennt und sie versteht, ist die Lösung akzeptabel, wenn das Ziel einer Prozedur, nämlich deren Ergebnis im Vordergrund steht. Aus Sicht eines users, insbesondere eines nicht besonders EDV affinen, steht der Weg im Vordergrund: "Warum springt das Bild während der Berechnung immer wieder hin und her. Das stört mich, und überhaupt ..."
Diese, meist recht lautstarken user, sind leider oft diejenigen, die sich gern "an höherer Stelle" Gehör verschaffen und die Akzeptanz einer EDV-Lösung dort - gewollt oder nicht - erschweren können.
Bisher bin ich mit der Programmierung aus Sicht der user immer sehr gut gefahren, auch im Hinblick auf die Realisierung zukünftiger Projekte. Entscheider und user schauen auf die Software und nicht in die Software. So lange die ungewöhnlichen "Pirouetten" im code dokumentiert und kurz begründet sind, sollte das sogar für einen Puristen auf Kundenseite, für den die Eleganz des code im Vordergrund steht, akzeptabel sein.
Einer Deiner Hinweise hat mir den Weg zur Lösung gezeigt: " ... dass Excel so beschäftigt ist, dass es vergisst sich beim Betriebssystem zu melden ... ". Das legte ein timing Problem nahe.
Vielen Dank dafür
Dieter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige