Anzeige
Archiv - Navigation
1468to1472
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

Userform

Userform
13.01.2016 11:31:17
Sling
Eine Frage zur Verwendung von Userform.show im VBModeless Modus.
Meine Userform bleibt weiss und zeigt keine Elemente an. Was tun?
Nach dem Aufruf der Userform wird der Programmcode bekanntlich weiter abgearbeitet. Bei mir soll die Userform einzelne Parameter aus dem Programm laufend ausgeben.
Die Userform "Form" besteht aus einem Label "Nr" und einem Abbruch Button. Im Label sollen die laufenden Paramter gezeigt werden. Nach einiger Zeit wartet das Programm auf die Bestätigung durch die Userform. Allerdings wird nichts ausgegeben oder angezeigt. Was mache ich falsch?
Das Testprogramm selber:

Global Weiter As Boolean
Sub Test()
Dim I, Z As Long
Weiter = False
Form.Show vbModeless
For I = 1 To 100
Sleep 100
Z = 0
Form.Nr.Caption = I
If I Mod 25 = 0 Then
Weiter = False
While Not Weiter And Z 

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

Betreff
Datum
Anwender
Anzeige
AW: Userform
13.01.2016 13:54:50
MatthiasG
Hallo Sling,
ich verstehe die Funktion jetzt auf Anhieb nicht, vor allem den der Sleep-Befehle (Da macht der PC nichts, er wartet aber auch nicht auf Eingaben!), aber ein DoEvents innerhalb der Schleifen könnte helfen:

For I = 1 To 100
Sleep 100
Z = 0
Form.Nr.Caption = I
DoEvents
If I Mod 25 = 0 Then
Weiter = False
While Not Weiter And Z 
Alternativ könntest Du auch Form.Repaint verwenden.
Gruß Matthias

AW: Userform
13.01.2016 14:59:42
Sling
Super und Danke Matthias, der DoEvents (direkt hinter der Initilisierung von Form.nr) zeigt mir jetzt in der Userform die richtigen Werte von I an! Nur auf die Button Eingabe reagiert die Userform noch nicht.
Sleep verwende ich, damit ein unload kommt, auch wenn der Userformbutton "Abbrechen" nicht reagiert. Sonst stellt dieser Button "Weiter" auf true und gibt damit die Schleife frei.
Hast du noch eine Idee?
Global Weiter As Boolean
Sub Test()
Dim I, Z As Long
Weiter = False
Load Form
Form.Show vbModeless
Form.Ok.SetFocus
For I = 1 To 100
Sleep 100
Z = 0
Form.Nr.Caption = I
DoEvents
If I Mod 25 = 0 Then
Weiter = False
While Not Weiter And Z 

Anzeige
AW: Userform
13.01.2016 15:03:57
MatthiasG
Hallo Sling,
Ich sehe nur den Codeschnipsel und habe keine Ahnung, was der macht.
Hast du auch Code im Userform-Modul stehen?
Was macht "Weiter", ist das ne globale Variable? Wo wird die gesetzt?
Gruß Matthias

AW: Userform
13.01.2016 15:51:19
Sling
Hallo Matthias,
die UF besteht aus zwei Elementen, dem Label, das laufend die veränderte Variable I anzeigt, das klappt prima und eben einem Abbr Button, das die Globalvariable Weiter auf true stellt und damit die Warteschleife beenden soll. Das klappt leider nicht, das Programm ist mit der Warteschleife beschäftigt und ein Abbr_klick Event aus der UF kommt nicht zustande.
Die Testversion ist die Einfachvariante eines Programms, das zwei Datenbanken vergleicht. Die UF ist dabei immer geöffnet und zeigt den Fortschritt der Abwicklung an. So wie I hier in der UF gezeigt wird. Gelegentlich braucht das Programm die Entscheidung des Nutzers, es gibt dann die beiden Datensätze in der UF aus und wartet in einer solchen Warteschleife auf den Buttonklick Ja onder Nein. Das Programm muß also warten, bis eine dieser Buttons die Globalvariable Weiter auf true setzt.
Und genau mit dieser Übergabe des Programmablaufs an die beiden Buttons habe ich Schwierigkeiten. So wie hier das Abr Button keine Funktion zeigt, solange die Warteschleife läuft. Nur wenn das Programm selber in einen Eingabemodus wechselt, z.Bs durch MsgBox, dann ist auch der Abbr Button wieder aktiv.
Wie also kann ich VBA dazu bringen den Abbr_Event zu berücksichtigen solange die Warteschleife läuft?
Danke dir noch einmal, mir scheint das ein einfaches Problem, aber irgendwie bin ich blind für die einfache Lösung...

Anzeige
AW: Userform
13.01.2016 16:08:43
Sling
Dein Hinweis war es dann doch, das DoEvent muß einfach noch in der Warteschleife eingesetzt werden und schon reagiert das Programm auch auf Klicks aus der UF.
Danke noch einmal!!

AW: Userform
13.01.2016 16:12:09
MatthiasG
Hallo Sling,
Und ich würde den Sleep-Befehl weglassen, der verlangsamt unnötig das Programm.
Während der 100 ms "sleep" regiert Excel nicht auf Events.
Gruß Matthias

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige