Office - Word, Excel und Co. 9.706 Themen, 40.868 Beiträge

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

Mic2004 / 3 Antworten / Flachansicht 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
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