Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Doppelclick und Einfachclick bei CommandButton
#1
Hallo liebe VBA Tüftler und Experten,

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.
Antworten Top
#2
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
[-] Folgende(r) 1 Nutzer sagt Danke an Storax für diesen Beitrag:
  • Wulfi
Antworten Top
#3
@Storax.
Na dann versuch mal damit  ein Doppelclick Ereignis auszulösen. Genau dieses Problem hatte ich ja geschildert.
Antworten Top
#4
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:
  • Wulfi
Antworten Top
#5
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.

Nochmal die Frage: Wofür soll das gut sein?


Angehängte Dateien
.xlsm   Demo42.xlsm (Größe: 20,3 KB / Downloads: 1)
[-] Folgende(r) 1 Nutzer sagt Danke an Storax für diesen Beitrag:
  • Wulfi
Antworten Top
#6
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:
  • Wulfi
Antworten Top
#7
Hallo Wulfi,

hier auch noch was:


' **************************************************************
'  Modul:  UserForm1  Typ = Userform
' **************************************************************


Option Explicit

Private Sub CommandButton1_Click()
 Application.OnTime Now + TimeValue("0:00:01"), "CommandButton1Clicking"
End Sub

Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 bolDblClick = True
End Sub


' **************************************************************
'  Modul:  Modul2  Typ = Allgemeines Modul
' **************************************************************


Option Explicit

Public bolDblClick As Boolean

Sub CommandButton1Clicking()
 If bolDblClick Then
   bolDblClick = False
   MsgBox "Doppelklick"
 Else
   MsgBox "Klick"
 End If
End Sub

Gruß Uwe
[-] Folgende(r) 2 Nutzer sagen Danke an Kuwer für diesen Beitrag:
  • schauan, Wulfi
Antworten Top
#8
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?
Antworten Top
#9
Hallo Wulfi,

z.B. mit einer weiteren Variable:


' **************************************************************
'  Modul:  Modul1  Typ = Allgemeines Modul
' **************************************************************


Option Explicit

Public bolDblClick As Boolean
Public oUF As MSForms.UserForm

Sub CommandButton1Clicking()
 If bolDblClick Then
   bolDblClick = False
   Unload oUF
   MsgBox "Doppelklick: Userform wurde geschlossen."
 Else
   MsgBox "Klick"
 End If
End Sub


' **************************************************************
'  Modul:  UserForm1  Typ = Userform
' **************************************************************


Option Explicit

Private Sub CommandButton1_Click()
 Set oUF = Me
 Application.OnTime Now + TimeValue("0:00:01"), "CommandButton1Clicking"
End Sub

Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 bolDblClick = True
End Sub

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Wulfi
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste