habe mich an folgendem Problem festgebissen. Gibt es eine Möglichkeit das ein CommandButton sowohl auf Click als auch auf Doppelclick in einer UserForm reagiert?
Da so etwas sich gegenseitig ausschließt:
Sub CommandButton1_Click() Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
habe ich bisher alles an Tricks versucht. Stichworte: Application.Wait, Sleep, MouseUp, MouseDown etc.
Nichts hat funktioniert. Geht so etwas überhaupt? Auch wenns nicht geht, schreibt mir das bitte.
07.11.2017, 19:33 (Dieser Beitrag wurde zuletzt bearbeitet: 07.11.2017, 19:33 von Storax.)
Wofür soll das gut sein? Habe bisher nie geschaut, aber es gibt tatsächlich das DblClick-Event
Zitat:Wenn Sie auf eine Befehlsschaltfläche doppelklicken, treten die folgenden Ereignisse in der angegebenen Reihenfolge ein: MouseDown ? MouseUp ? Click ? DblClick ? MouseUp ? Click Der zweite Klick hat möglicherweise keine Auswirkung (z. B. wenn das Click -Makro oder die Ereignisprozedur als Reaktion auf das erste Auftreten des Click -Ereignisses ein gebundenes Dialogfeld öffnet). Um zu verhindern, dass das zweite Click -Makro oder die Ereignisprozedur ausgeführt wird, fügen Sie eine CancelEvent -Aktion in das DblClick -Makro ein, oder verwenden Sie in der DblClick -Ereignisprozedur das Cancel-Argument. Im Allgemeinen sollte ein Doppelklicken auf eine Befehlsschaltfläche unterbunden werden.
Mit anderen Worten, es geht, aber hat möglicherweise keinen Effekt. Und wenn Du doppelt klickst, werden beide Ereignisse ausgelöst.
Folgendes geht z.B.
Code:
Private Sub CommandButton1_Click() Debug.Print "Klick" End Sub
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Debug.Print "Doppel-Klick" End Sub
Besonders sinnvoll ist das nicht, denn wenn Du auf die Schaltfläche doppelt klickst, hast Du als Ergebnis Klick Doppel-Klick
07.11.2017, 20:40 (Dieser Beitrag wurde zuletzt bearbeitet: 07.11.2017, 20:40 von RPP63.)
Schrieb er ja im ersten Zitat, der Storax. Möglich wäre, eine modulweite Boolean-Variable zu füllen, die "abwartet", ob nach dem ersten Klick betriebssystemabhängig ein zweiter Klick, der als Doubleclick interpretiert wird, erfolgt und dann kein Click-Event zu befeuern.
Hat einer Lust und kennt den Eintrag der Registry, in dem dies gespeichert ist?
Jedenfalls imo Kanonen auf Spatzen.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28 • Wulfi
07.11.2017, 20:48 (Dieser Beitrag wurde zuletzt bearbeitet: 07.11.2017, 20:50 von Storax.)
Gut, dann hast Du ja eine Antwort. Es ist möglich, nur reagiert es nicht so wie Du es gerne hättest. Denn beim Doppelklick werden folgende Ereignisse ausgelöst:MouseDown ? MouseUp ? Click ? DblClick ? MouseUp ? Click Ja nach dem was im Ereignis programmiert ist, hat der zweite Klick möglicherweise keine Auswirkung oder sie werden hintereinader abgefeuert.
07.11.2017, 20:57 (Dieser Beitrag wurde zuletzt bearbeitet: 07.11.2017, 20:58 von schauan.)
Hallo Wulfi,
nö. Du hast geschrieben Gibt es eine Möglichkeit das ein CommandButton sowohl auf Click als auch auf Doppelclick in einer UserForm reagiert?
Bei Klick gibt es Klick und bei Doppelklick gibt es Klick und Doppelklick, hast also sogar eine Variante mehr als gewollt.
Spaß beiseite, hier mal ein Ansatz:
im Userform:
Code:
Private Sub CommandButton1_Click() Application.OnTime Now + TimeValue("00:00:01"), "'debaggen ""Click""'" End Sub
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) WartsAb = True Call debaggen("DblClick") End Sub
In einem Modul:
Code:
Public WartsAb As Boolean
Sub debaggen(ByVal strGliggor As String) Dim strTru If WartsAb Then strTru = "TRUE" Else strTru = "FALSE" Debug.Print strTru & vbTab & strGliggor If WartsAb = True And strGliggor = "Click" Then Exit Sub MsgBox strGliggor Application.OnTime Now + TimeValue("00:00:01"), "HoerAuf" End Sub
Sub HoerAuf() Dim strTru WartsAb = False If WartsAb Then strTru = "TRUE" Else strTru = "FALSE" Debug.Print strTru End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28 • Wulfi
14.11.2017, 15:04 (Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2017, 15:04 von Wulfi.)
Betr: Application.OnTime Now + TimeValue("0:00:01"), "CommandButton1Clicking" 'Aufruf aus Userform + Sub CommandButton1Clicking() 'steht in irgendeinem Modul
Hallo,
schaue ich mir den Code von Uwe an wird ja mit "CommandButton1Clicking" praktisch eine "Funktion" , die irgendwo in einem Modul liegt aufgerufen. Die macht dann irgendwas. Nun wäre es ganz schön, wenn ich den Aufruf "CommandButton1Clicking" das die UserForm - weiß nicht ob ich mich da richtig ausdrücke - gleich mit übergeben wird.
Also praktisch so etwas:
Application.OnTime Now + TimeValue("0:00:01"), CommandButton1Clicking (Me) ' Aufruf aus Userform heraus
Sub CommandButton1Clicking(UF as UserForm) 'Empfang im Modul
dann weiß ich von welcher UserForm ich aufgerufen wurde und welche Schalter und Methoden mir zur Verfügung stehen und ich kann besser damit arbeiten. Wie kann ich so etwas umsetzen?
' ************************************************************** ' Modul: Modul1 Typ = Allgemeines Modul ' **************************************************************
OptionExplicit
Public bolDblClick AsBoolean Public oUF As MSForms.UserForm
Sub CommandButton1Clicking() If bolDblClick Then bolDblClick = False Unload oUF MsgBox "Doppelklick: Userform wurde geschlossen." Else MsgBox "Klick" EndIf EndSub
' ************************************************************** ' Modul: UserForm1 Typ = Userform ' **************************************************************
OptionExplicit
PrivateSub CommandButton1_Click() Set oUF = Me Application.OnTime Now + TimeValue("0:00:01"), "CommandButton1Clicking" EndSub
PrivateSub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) bolDblClick = True EndSub
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28 • Wulfi