Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

application.statusbar

Forumthread: application.statusbar

application.statusbar
heinz.schikorra@tomra.de
Hallo,
in einem VBA Programm habe ich eine Verlaufsanzeige in einer Schleife. Nach ca. 12.000 Durchläufen wird die Statusanzeige nicht mehr aktualisiert. Den Code habe ich unten aufgeführt:
application.calculation = xlcalculationmanual
application.screenupdating = false
for i1 = 1 to 80000
application.statusbar = "Datensatz " & format(i1,"0000000")
'... hier geschehen weitere Aktionen
next i1
application.screenupdating = true
application.statusbar = false
application.calculation = xlautomatic
Frage: Wie kann ich das Einfrieren verhindern?
Danke für Hilfe!
MfG Heinz
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: application.statusbar
21.04.2012 14:04:11
Hajo_Zi
Hallo Heinz,
ich würde vermuten mit application.screenupdating = false ist auch die statusbar aus.

AW: application.statusbar
21.04.2012 14:13:47
Reinhard
Hallo Heinz,
bau mal Doevents ein
Sub tt()
Dim i1
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For i1 = 1 To 80000
Application.StatusBar = "Datensatz " & Format(i1, "0000000")
'... hier geschehen weitere Aktionen
DoEvents
Next i1
Application.ScreenUpdating = True
Application.StatusBar = False
Application.Calculation = xlAutomatic
End Sub

Gruß
Reinhard
Anzeige
AW: application.statusbar
21.04.2012 21:04:55
fcs
Hallo Heinz,
dies ist ein typisches Verhalten von Excel 2007/2010 bei VBA-Makros mit langer Laufzeit -zumindest bei mir in Verbindung mit Windows-Vista tritt dieses Phänomen auch immer wieder auf.
Das Excel-Programmfenster wird dann bei mir auch meist mit dem Status "keine Rückmeldung" angezeigt.
Zur Ursache (Office/Excel-intern oder Windows-Betriebssystem) hab ich bisher nichts herausgefunden.
Gruß
Franz
Anzeige
Nachfrage
21.04.2012 21:55:10
Reinhard
Hallo Franz,
den Code den ich zeigte habe ich getestet. Mit DoEvents dauerte er schon länger
und mein Eindruck war daß da das in der Statusbar länger sichtbar war und nicht so durchgehuscht
ist wie ohne DoEvents.
So wie du es schreibst scheint DoEvents nix zu bringen. Ist das sicher?
Zu dem "keine Rückmeldung"
Mir ist das sehr unklar, auch in XL2000. Es bedeute m:E. nur daß grad in den Momenten Win
oder sonstwer, vielleicht Excel von dem Code keine Rückmeldung erhät.
Was immer das sein soll.
Schon häfig war es so bei länger dauernden Codes daß zwar zwischenzeitlich "keine Rückmeldung"
angezeigt wird im Editor-Fenster, auch Umschalten zu Excel geht nicht, aber dann wenn
der Code fertig ist geht wieder alles wie immer.
Andererseits hatte ich es auch schon mehrfach daß ich bei "keine Rückmeldung"
und wahrlich langer Wartezeit nur noch den Taskmanager bemühen konnte und Excel abzuschießen.
Hast du gleiche Erfahrungen? Wenn ja berichte bitte wie du dir vorstellst was da ablaufen könnte.
Gruß
Reinhard
Anzeige
AW: Nachfrage
22.04.2012 19:43:08
fcs
Hallo Reinhard,
ich hab mal ein wenig rumprobiert. Mit dem Einbau von "DoEvents" in die For_Next-Schleife bzw. vor jede Statusanzeige wird die Anzeige der Statuszeile ständig aktualisiert. Wie von dir beobachtet benötigt ein Makro dann etwas mehr Zeit.
Wann "keine Rückmeldung" kommt ist scheinbar auch etwas unterschiedlich. Es scheint davon abzuhängen, wie beschäfftigt Windows insgesamt ist und ob Excel schon längere Zeit in Betrieb ist. Jedenfalls konnte ich beobachten, dass nach dem Neu-Start von Excel oder auch nach dem Öffnen einer Datei Makros durchlaufen ohne Hinweis "keine Rückmeldung" aber nach mehrmaliger Ausführung kam dann die Anzeige.
Als Alternative zur Statuszeile kann man den Bearbeitungsfortschritt auch in einem ungebundenem Userform anzeigen. Dazu wird der Anzeige-Text in den Fenstertitel des UF geschrieben (Caption-Eigenschaft des UF). Die Verzögerung im Makro ist dann etwas größer als bei Anzeige in Statuszeile.
"keine Rückmeldung" und Excel hängt sich auf. Dann beenden via Taskmanager oder Alt+F4.
Kommt meistens vor bei umfangreichen Lösch-/Kopieraktionen in Verbindung mit komplexen Formeln. Passiert sowohl bei der Ausführung von Makros als auch im Handbetrieb. Das scheint immer noch eine Schwäche in der Speicherverwaltung (Arbeitsspeicher/Auslagerungsdatei/Zwischenablage/Undofunktion) zu sein nach der Umstellung auf größere Zeilen-/Spaltenanzahl in Excel 2007.
Gruß
Franz
Anzeige
Danke Franz für deine Informationen o.w.T
22.04.2012 22:39:58
Reinhard

AW: Danke Franz für deine Informationen o.w.T
24.04.2012 08:14:32
Martin
Hallo Reinhard,
dann setze DoEvents doch einfach bei jedem 100sten oder 1000sten Schleifendurchlauf ein. Dann wird dein Makro nicht erheblich langsamer und du siehst den Status.
Viele Grüße
Martin
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Anwendung der Statusleiste in Excel VBA


Schritt-für-Schritt-Anleitung

Um die application.statusbar in einem VBA-Makro effektiv zu nutzen, folge diesen Schritten:

  1. Aktiviere die Statusleiste: Setze Application.StatusBar auf eine Startnachricht.

    Application.StatusBar = "Starte das Makro..."
  2. Schalte die Bildschirmaktualisierung aus: Um die Leistung zu verbessern, deaktiviere die Bildschirmaktualisierung.

    Application.ScreenUpdating = False
  3. Führe die Schleife aus: Nutze eine Schleife für deine Berechnungen. Aktualisiere die Statusleiste in jedem Durchlauf.

    For i1 = 1 To 80000
       Application.StatusBar = "Datensatz " & Format(i1, "0000000")
       '... hier geschehen weitere Aktionen
    Next i1
  4. Aktualisiere die Bildschirmdarstellung: Aktiviere die Bildschirmaktualisierung wieder, nachdem die Schleife beendet ist.

    Application.ScreenUpdating = True
  5. Setze die Statusleiste zurück: Setze die Statusleiste zurück, um die Standardanzeige wiederherzustellen.

    Application.StatusBar = False
  6. Aktiviere die automatische Berechnung: Stelle die Berechnungseinstellungen wieder auf automatisch.

    Application.Calculation = xlAutomatic

Häufige Fehler und Lösungen

  • Fehler: Statusleiste wird nicht aktualisiert.

    • Lösung: Füge DoEvents in die Schleife ein, um die Statusanzeige kontinuierlich zu aktualisieren.
    DoEvents
  • Fehler: "Keine Rückmeldung" wird angezeigt.

    • Lösung: Dies kann durch lange laufende Prozesse verursacht werden. Reduziere die Anzahl der Schleifen oder setze DoEvents regelmäßig ein.
  • Fehler: Anwendung friert ein.

    • Lösung: Verwende Application.ScreenUpdating = True und setze die Statusleiste zurück, bevor das Makro endet.

Alternative Methoden

Eine alternative Methode zur Anzeige des Fortschritts ist die Verwendung eines UserForms, das den Fortschritt anzeigt. Du kannst den Text im Fenstertitel (Caption) des UserForms aktualisieren:

UserForm1.Caption = "Fortschritt: " & Format(i1, "0000000")

Diese Methode kann nützlich sein, wenn du eine detailliertere Fortschrittsanzeige benötigst.


Praktische Beispiele

Hier ist ein einfaches Beispiel für ein Makro, das die application.statusbar verwendet:

Sub FortschrittAnzeigen()
    Dim i1 As Long
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

    For i1 = 1 To 80000
        Application.StatusBar = "Verarbeite Datensatz " & Format(i1, "0000000")
        ' Hier könnten weitere Aktionen stehen
        DoEvents
    Next i1

    Application.ScreenUpdating = True
    Application.StatusBar = False
    Application.Calculation = xlAutomatic
End Sub

Tipps für Profis

  • Setze DoEvents gezielt: Statt DoEvents in jedem Schleifendurchlauf zu verwenden, kannst du es auch nur alle 1000 Iterationen einfügen, um die Leistung zu optimieren.

  • Verwende die Statusleiste für wichtige Informationen: Zeige wichtige Statusinformationen an, wie z.B. Fehler- oder Fortschrittsmeldungen.

  • Teste die Performance: Experimentiere mit der Verwendung und dem Timing von DoEvents, um die optimale Performance für dein spezifisches Makro zu finden.


FAQ: Häufige Fragen

1. Warum wird die Statusleiste nicht aktualisiert? Es kann sein, dass die Bildschirmaktualisierung deaktiviert ist oder DoEvents fehlt. Achte darauf, beides korrekt zu verwenden.

2. Was bedeutet "keine Rückmeldung" in Excel? Dies zeigt an, dass Excel im Moment beschäftigt ist und keine Eingaben annehmen kann. Es kann bei langen Makros vorkommen.

3. Wie kann ich die Statusleiste zurücksetzen? Setze die Statusleiste einfach auf False, um die Standardanzeige wiederherzustellen.

4. Ist die Verwendung von DoEvents immer notwendig? Nicht immer, aber es hilft, die Benutzeroberfläche reaktionsfähig zu halten, besonders bei langen Schleifen. Teste, ob es für dein spezifisches Szenario erforderlich ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige