Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - Info ausgeben ohne OK

Forumthread: VBA - Info ausgeben ohne OK

VBA - Info ausgeben ohne OK
12.10.2012 10:00:44
Thomas
Moin,
und alle Jahre wieder ;)
Gibt es wirklich keine 'einfache' Möglichkeit in einem ganz einfachen Modul was nur 2 große Excel-Datenblätter durchsucht, eine Info auszugeben, wie weit er in etwa ist?
Es werden 2 verschachtelte Schleifen abgearbeitet
for z = 1 to 1000
for i = 1 to 10000000
next i
INFOAUSGABE
next z
und wenn an der Stelle INFOAUSGABE nur die variable z irgendwo auf dem Bildschirm angezeigt würde, dann wüsste man wenigstens wie weit man ungefähr wäre...
Gibt es da nicht eine elegante Möglichkeit? Es soll natürlich keine Bestätigung verlangt werden...
Tommi

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Info ausgeben ohne OK
12.10.2012 10:05:19
{Boris}
Hi Tommi,
Du kannst die Info auch in der Statusbar anzeigen lassen (unten links).
Das trägt aber nicht wirklich zum Beschleunigen der Anwendung bei...
Statt INFOAUSGABE also:
Application.StatusBar = z
Ich würd`s nicht machen.
VG, Boris

AW: VBA - Info ausgeben ohne OK
12.10.2012 10:15:16
Thomas
Da es bei rund 10 Mio. Vergleichen nur rund 1000x angezeigt wird und die Anwendung eh 15 Minuten läuft, sollten die 1000 Anzeigen nicht so die Welt sein ;)
Danke für die Info!
Tommi

Anzeige
10 Mrd. nicht 10 Mio!
12.10.2012 10:48:44
Rudi
Hallo,
was treibst du da?
Die Schleifen laufen auf meinem I3-2400 70Sek. Was passiert die anderen 14 Min.?
Gruß
Rudi

AW: 10 Mrd. nicht 10 Mio!
12.10.2012 10:56:56
Thomas
Im Schleifenrumpf werden rund 20 Textvergleiche ausgeführt ;) Das ist alles etwas kompliziert ;) Also mit Teiltexten aus verschiedenen Zellen der Tabs und zwischendrin noch Bereinigungen/umbauten usw.
Tommi

Anzeige
Ja, gibt's! Wohl auch echte Fortschritts...
12.10.2012 10:27:03
Luc:-?
…anzeigen für die Statusbar, Tommi;
ich verwende, wenn's länger dauern kann, die Statusbar und natürl wird's dadurch nicht schneller, eher ein klein wenig langsamer, wenn man da einen Zähler anzeigen lässt. Die Balkenanzeige könnte ggf noch etwas mehr bremsen, je nachdem wie „dicht“ bzw „eng“ das Eine oder Andere ist.
Wenn du partout eine Meldung anzeigen lassen willst, empfehle ich nicht das, was gemeinhin empfohlen wird und auch auf mancher WebSite zu finden ist, sondern ein ganz ordinäres Textfeld, das man ganz einfach wieder verschwinden lassen kann (ohne Klick), wenn alles vorbei ist. Ich konstruiere auf der Basis auch MsgBoxes, die innerhalb einer festlegbaren Zeitspanne bedient wdn müssen, sonst wird automatisch ein Default-Button auf derselben bedient (die 3D-Zustandsänderung - von erhaben auf vertieft kann man kontinuierl innerhalb dieser Zeitspanne abfragen → hierbei DoEvents erforderlich!). Aber für deine Zwecke sollte Ersteres bzw die schon von Boris erwähnte StatusBar-Anzeige ausreichen — alles Andere bremst u.U. mehr als das es nützt.
Falls du die StatusBar-Anzeige nutzen willst, unbedingt die VBE-Hilfe dazu lesen, damit du nichts Wichtiges vergisst! ;-)
Gruß+schöWE, Luc :-?

Anzeige
AW: Ja, gibt's! Wohl auch echte Fortschritts...
12.10.2012 11:01:57
Thomas
Hallo Luc,
ja, mit dem Thema muss ich mich wohl wirklich noch irgendwann mal konkreter beschäftigen - ist nur einfach keine Zeit gewesen in den letzten Wochen/Monaten (irgendwie kommt immer was dazwischen) - aber wenn man eine individuelle Eingabemaske basteln will (das ist dann ein nächstes Projekt) kommt man um diese UserForms wohl nicht drumrum (damit geht es wohl auch irgendwie).
Ansonsten, das passt so schon mit der StatusBar-Anzeige, wenn jeder zu prüfende Ausdruck und die dazugehörige (Gesamt-aktuelle Nr) (Gesamt ist bekannt) angezeigt wird, dann gibt es eben 1000 Anzeigen, also wird ungefähr jede Sekunde eine Ausgabe gemacht, das ist im Rahmen ;)
Tommi
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Info ausgeben ohne Bestätigung


Schritt-für-Schritt-Anleitung

Um eine Info in Excel über den Fortschritt deiner Schleifen anzuzeigen, ohne dass eine Bestätigung benötigt wird, kannst du die Statusleiste verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (ALT + F11).

  2. Erstelle ein neues Modul (Rechtsklick auf "VBAProject" > "Einfügen" > "Modul").

  3. Füge den folgenden Code ein:

    Sub FortschrittAnzeigen()
       Dim z As Long
       For z = 1 To 1000
           ' Hier kannst du deine Schleifenlogik einfügen
           Application.StatusBar = "Fortschritt: " & z & " von 1000"
           DoEvents ' Dadurch kann Excel die Statusbar aktualisieren
       Next z
       Application.StatusBar = False ' Setze die Statusbar zurück
    End Sub
  4. Schließe den VBA-Editor und führe das Makro aus (über Excel: Entwicklertools > Makros > FortschrittAnzeigen).

Dieser Code zeigt in der Statusbar an, wie weit die Schleife fortgeschritten ist, ohne dass eine VBA MsgBox ohne Bestätigung erforderlich ist.


Häufige Fehler und Lösungen

  • Problem: Die Statusbar wird nicht aktualisiert.

    • Lösung: Stelle sicher, dass DoEvents im Schleifenrumpf verwendet wird. Dies erlaubt Excel, die Benutzeroberfläche zu aktualisieren.
  • Problem: Fehlermeldung beim Ausführen des Codes.

    • Lösung: Überprüfe, ob du den Code in einem Standardmodul eingefügt hast und dass die Variablen korrekt deklariert sind.

Alternative Methoden

Wenn du eine andere Möglichkeit zur Anzeige von Informationen suchst, kannst du ein Textfeld auf einem Arbeitsblatt verwenden:

  1. Gehe zu "Entwicklertools" > "Einfügen" und wähle "Textfeld".
  2. Platziere das Textfeld auf deinem Arbeitsblatt.
  3. Im VBA-Code kannst du den Text im Textfeld aktualisieren:

    ActiveSheet.TextBoxes("TextBox1").Text = "Fortschritt: " & z

Diese Methode bietet eine flexiblere Anzeige, da du das Textfeld nach Bedarf anpassen oder positionieren kannst.


Praktische Beispiele

Hier ist ein Beispiel, wie du die Statusbar und ein Textfeld kombinieren kannst:

Sub FortschrittMitTextfeld()
    Dim z As Long
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Tabelle1") ' Ändere den Tabellennamen entsprechend

    For z = 1 To 1000
        Application.StatusBar = "Fortschritt: " & z & " von 1000"
        ws.TextBoxes("TextBox1").Text = "Fortschritt: " & z
        DoEvents
    Next z
    Application.StatusBar = False
End Sub

Dieses Beispiel zeigt sowohl in der Statusleiste als auch im Textfeld den Fortschritt an.


Tipps für Profis

  • Wenn du längere Prozesse hast, erwäge die Verwendung von UserForms, um benutzerdefinierte Fortschrittsanzeigen zu erstellen.
  • Nutze Application.ScreenUpdating = False, um die Bildschirmaktualisierung während der Ausführung zu deaktivieren, was die Leistung verbessern kann.
  • Stelle sicher, dass du die Statusbar am Ende deines Codes zurücksetzt, um die Benutzeroberfläche sauber zu halten.

FAQ: Häufige Fragen

1. Wie kann ich eine MsgBox ohne Bestätigung erstellen?
Du kannst eine MsgBox nicht ohne Bestätigung anzeigen. Eine Alternative ist, die Statusbar oder ein Textfeld zu verwenden, um Informationen anzuzeigen.

2. Welche Excel-Version benötige ich für VBA?
VBA ist in den meisten Excel-Versionen verfügbar, einschließlich Excel 2010 und neuer. Stelle sicher, dass die Entwicklertools aktiviert sind, um auf den VBA-Editor zugreifen zu können.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige