Office - Word, Excel und Co. 9.747 Themen, 41.429 Beiträge

Excel - Visual Basic Macro zeit nur "weißes" Fenster an

Mic2004 / 3 Antworten / Baumansicht Nickles

Hallo zusammen,

ich habe mir ein kleines Excel-Makro (Excel XP, VBA6) erstellt, mit dem ich ein paar Daten in eine bestimmte Excel-Tabelle laden kann. Ich habe es so gemacht, dass dem Anwender ein Fenster angezeigt wird, in dem er sieht, dass er sich etwas gedulden muss.

Der Hauptquellcode ist also in dem Fenster unter „Private Sub UserForm_Activate()“ abgelegt. Es verläuft also so: User drückt einen Button --> Button startet das UserForm --> UserForm startet die Aufgabe.

Leider ist es in den meisten Fällen so, dass das UserForm während des Vorgangs nicht wie gewünscht anzeigt, dass der Nutzer einen Moment waren soll, sondern es bleibt einfach weiß.

http://mitglied.multimania.de/mrmic3000/nickles/Fenster_leer.JPG

Randbemerkung: Füge ich eine MsgBox(„Hallo“) ein, zeigt das UserForm das an, was es soll. Ich nehme an, dass das daran liegt, dass das Programm einen Moment pausiert.

Ich habe daraufhin folgende Idee aus dem Internet erfolglos ausprobiert:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub UserForm_Activate()
Sleep 100
[… meine Funktionen …]
End Sub


Hat jemand von euch eine Idee, wie man dieses Problem abstellen kann?

Vielen Dank im Voraus!

Grüße,
Mic2004.

bei Antwort benachrichtigen
neanderix Mic2004 „Excel - Visual Basic Macro zeit nur "weißes" Fenster an“
Optionen
Randbemerkung: Füge ich eine MsgBox(„Hallo“) ein, zeigt das UserForm das an, was es soll. Ich nehme an, dass das daran liegt, dass das Programm einen Moment pausiert.

richtig.

Hat jemand von euch eine Idee, wie man dieses Problem abstellen kann?

yo: schmeiss das Sleep... raus und füge in sinnvollen Abständen ein

DoEvents

hinzu.
Das ermöglicht dem System, anstehende andere Aufgaben abzuarbeiten - eben auch, dein Textfeld o.ä. zu aktualisieren.

Wo du das jetzt einsetzt und wie oft, musst du ausprobieren.

Volker
Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
Mic2004 Nachtrag zu: „Excel - Visual Basic Macro zeit nur "weißes" Fenster an“
Optionen

Hey,

danke für den Tipp. Das ist glaube ich die beste Lösung. Vorher hatte ich einen "Wait"-Befehl, der anders als die Sleep-Funktion den Sub nicht unterbricht sondern im Hintergrund weiter arbeiten lässt. Da musste ich aber mindestens eine Sekunde warten.

[...]
Wait 1
[...]

Welchen Einfluss hat DoEvents auf meine Sub? Erkaufe ich mir dadurch andere Probleme oder kann ich es theoretisch beliebig oft einbauen? Was genau passiert, wenn die Sub in den Befehl DoEvents hinein läuft?

Grüße und danke,
Mic2004.

bei Antwort benachrichtigen
neanderix Mic2004 „Excel - Visual Basic Macro zeit nur "weißes" Fenster an“
Optionen
Welchen Einfluss hat DoEvents auf meine Sub? Erkaufe ich mir dadurch andere Probleme oder kann ich es theoretisch beliebig oft einbauen? Was genau passiert, wenn die Sub in den Befehl DoEvents hinein läuft?

Den DoEvents kannst du theoretisch beliebig oft einfügen - ich habe, allerdings in einer Access-DB - eine Prozedur, in der er insgesamt 8 mal steht - und zwar immer jeweils nach einer länger dauernden Abfrage bzw. einem länger dauernden Export per DoCmd.Transferspreadsheet.
Sinn des ganznez: er soll ermöglichen, dass ein großes Textfeld, das mir als eine Art Logfenster dient, auch aktualisiert wird. Ohne die "DoEvents" dazwischen bliebe das Feld weiss und würde erst am Ende der Prozedur aktualisiert (getestet!')

Nachteil: du kannst eine etwas längere Laufzeit der Prozedur bekommen. Aber ich denke, das ist verschmerzbar.

Was macht "DoEvents"? Ganz einfach: im Prinzip sagt es dem Betriebssystem "du bist dran, aktualisiere mal deine anstehenden Aufgaben" - und dazu gehören halt auch so Dinge wie Aktualisierung der Bildschirmgrafik.

http://www.vbarchiv.net/commands/DoEvents.php


Volker
Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen