Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
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 Erstaufruf

Userform Erstaufruf
16.06.2020 23:46:31
Stephan
Hallo
Stundenlang schon suche ich nach Antwort auf meine Frage:
Bitte https://www.herber.de/bbs/user/138349.xlsm aufrufen und den Sternbutton drücken. Oder besser das Makro schrittweise durchlaufen.
Warum wird Sub ListBox1_Enter() beim Erstaufruf der userform durchgeführt?
Das ist der Code aus dem hochgeladenem Beispiel der Userform:
Option Explicit
Private Sub UserForm_Initialize()
End Sub

Private Sub ListBox1_Enter()
'   Warum wird das beim
'   Erstaufruf durchgeführt?
ListBox1.AddItem "ListBox1_Enter wurde durchgeführt"
End Sub
Beim Aufruf wird UserForm_Initialize ausgeführt und dann unverständlicherweise ListBox1_Enter.
Stephan

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform Erstaufruf
17.06.2020 00:03:17
Mullit
Hallo,
Deine Box hat den TabIndex 0 ist also das erste Objekt in der Aktivierreihenfolge und somit ActiveControl, das wiederum hat auch den Focus und feuert das Enter Event, wenn vorhanden. Ändere mal den TabIndex im Eig.-fenster...
Gruß, Mullit
AW: Userform Erstaufruf
17.06.2020 00:45:32
Stephan
Hallo mullit,
Gut, dann bekommt die Listbox den TabIndex 4 und alles ist OK. Vielen Dank.
Nur, verstehen tu ich es nicht. Auch nicht, was Du da schreibst mit ActiveControl. Ist das so eine Regel, dass nach dem Initialisieren immer TabIndex 0 den Fokus bekommt und dadurch den/das Enter-Event auslöst?
Stephan
Anzeige
AW: Userform Erstaufruf
17.06.2020 06:46:49
Mullit
Hallo,
macht nix, aber das wird schon, i. Gr. so wie Du schon schreibst, der TabIndex legt die Aktivierreihenfolge(Tab Order) fest, die Du mit der Tabulatortaste durchgehen kannst, um bspw. Textboxen nacheinander zu befüllen, diese erhalten dann den Focus und es würde jeweils auch ihr Enter Event ausgelöst.
https://docs.microsoft.com/de-de/office/vba/api/access.textbox.tabindex
Genau, nach dem Initialisieren erhält das erste Element im Tab Order den Focus >>> Enter Event wird gefeuert, verliert ein Objekt den Focus, wird das Exit Event gefeuert und das Enter Event des neuen Objektes mit dem Focus...
ActiveControl ist ein Objekt Deiner UserForm-Klasse (guck mal in den Objektkatalog...) und repräsentiert das Control, das den Focus besitzt, füg das mal bei Deiner Form mit ein, dann wird's klarer:
Option Explicit

Private Sub UserForm_Activate()
MsgBox ActiveControl.Name
End Sub

Private Sub ListBox1_Enter()
'   Warum wird das beim
'   Erstaufruf durchgeführt?

    ListBox1.AddItem "ListBox1_Enter wurde durchgeführt"

End Sub



Du kannst übrigens auch den TabIndex = 0 belassen und einen booleschen Flag einführen:
Option Explicit

Private mblnInit As Boolean

Private Sub UserForm_Initialize()
mblnInit = True
End Sub

Private Sub ListBox1_Enter()
'   Warum wird das beim 
'   Erstaufruf durchgeführt? 
If mblnInit Then
   mblnInit = False
Else
    ListBox1.AddItem "ListBox1_Enter wurde durchgeführt"
End If
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
AW: Userform Erstaufruf
17.06.2020 10:24:09
Luschi
Hallo Stephan,
es gibt leider keine Einstellung, mit der man die Ereignis-Susführung unterdrücken kann wie auf der Tabellenebene mit 'Application.EnableEvents = False'. Deshalb gibt es bei mir boolsche Variablen pro Steuerelement, die gezielt auf 'False' setzt werden, um das beim Eintritt des Ereignis sofort wieder zu verlassen, ohne den darin befindlichen Code auszuführen. Das sieht dann so aus:
im Formular-Objekt
'Code im Formular! 
Option Explicit 
 
Dim LB_1 As Boolean 
 
Private Sub UserForm_Activate() 
    'verhindert zwar nicht das Ausführen des Ereignisses 'ListBox1_Enter' 
    'aber sorgt dafür, das dieses Ereignis sofort wieder verlassen wird 
    LB_1 = False 
     
End Sub 
 
Private Sub ListBox1_Enter() 
    If Not LB_1 Then 
       LB_1 = True  'wichtig, sonnst findes dieses Ereignis NIE statt 
       Exit Sub 
    End If 
    'hier der eigentliche Code, wenn per Maus oder Vba-Code 
    'die Listbox den Focus erhält 
    '... 
End Sub 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0

Gruß von Luschi
aus klein-Paris
Anzeige
AW: Userform Erstaufruf
17.06.2020 21:03:19
Stephan
Danke Euch für den Workaround und guten Erklärungen.
Dennoch, eine Frage hätte ich da noch:
Im folgenden Beispiel https://www.herber.de/bbs/user/138391.xlsm soll in die Textbox ein Text eingegeben und bei Enter die OK-Taste betätigt werden. Das geht.
Wenn in der Textbox genau das Wort "Birne" steht, soll das Makro den erste Eintrag in der Listbox ("Apfel") auswählen. Nun soll man einerseits in der Textbox weiter schreiben können, aber bei Enter soll der markierte Ausdruck von der Listbox in die Textbox gesetzt werden.
Sobalt in der Textbox nicht mehr "Birne" steht, zB weil man weiter geschrieben hat, soll wieder der OK-Button auf Enter reagieren.
Hier der Userform-Code, wie er auch im Beispiel eingebaut ist
Option Explicit
Private Sub buttonOK_Click()
MsgBox "OK wurde gedrückt"
End Sub
Private Sub TextBox1_Change()
If UCase(TextBox1) = "BIRNE" Then
ListBox1.ListIndex = 0          'Erster Listeneintrag wird ausgewählt
Else
ListBox1.ListIndex = -1          'Kein Listeneintrag wird ausgewählt
End If
End Sub

Private Sub UserForm_Initialize()
ListBox1.AddItem "Apfel"
TextBox1.SetFocus
End Sub

Stephan
Anzeige
AW: Userform Erstaufruf
20.06.2020 06:27:05
Oberschlumpf
Hi Stephan,
deine neue Frage hat mit der alten so rein gar nix zu tun.
Daher schlage ich dir vor: neue Frage = neuer Beitrag
Denn in diesem Forum ist es fast üblich (nicht immer, aner sehr oft), dass die Zuerst-Antworter auch alle Folgefragen im selben Beitrag beantworten (müssen), da sich andere Antworter sich sehr oft nicht mehr mit "einmischen".
Das hat dann zur Folge, dass in deinem Fall sich nur noch Mullit und/oder Luschi mit deinen Problemen beschäftigen....und ihre Zeit damit verbringen (müssen) - was ja auch doof ist, weil ein Forum ist für alle da...
Ciao
Thorsten
Anzeige
AW: Userform Erstaufruf
20.06.2020 08:07:15
Stephan
Da hier keine Antwort mehr zu erwarten ist, habe ich eine verbesserte neue Frage gestellt:
"Userform anpassen" von Stephan T. vom 19.06.2020 21:51:22
Hoffe, es gibt keinen ernsthaften Grund für Mullit und Luschi, hier nicht weiter zu anworten. Danke Euch nochmals für Eure bisherigen Antworten.
Ein Themengebiet ist für den Fragesteller so komplex, dass eine exakte Fragestellung oft schwierig, aber notwendig, ist. Schwierig, weil einem die Zusammenhänge nicht klar sind oder noch unwesentlich erscheinen. Notwendig, um vom Informanten eine möglichst informative Antwort zu bekommen. So ist vielleicht der Unterschied dieser unbeantworteten zur eingangs erwähnten neuen Frage erklärlich.
Es ist Mullits gutem Stil seiner Antworten zu verdanken, dass ich hier eine neue Frage angehängt habe. Ja, Thorsten, Du hast ja recht. Und ich habe noch dazu eine neue Frage eröffnet, ohne dies hier zu notieren. Danke für Deinen Hinweis.
Gruß, Stephan
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige