簡體   English   中英

如果單擊三次,我可以在 VBA 用戶表單中運行一個子程序嗎? (或更多點擊)

[英]Can I run a sub in a VBA userform if something is triple clicked? (or more clicks)

我想知道當我的用戶表單中的某些內容被三次點擊(或更多點擊)時我是否可以運行子/宏? 而“某物”可以是 label、圖像、文本框或其他任何內容。

基本上使用這種方法:

Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
End Sub

但是三次點擊?

我在 web 中搜索此類信息時沒有運氣。

但它的目的是用作復活節彩蛋,供點擊次數超過預期次數的人使用。 – 尼克 1 小時前

有趣:) 為此,您將不得不使用_Click()_DblClick()Application.OnTime

邏輯:

  1. 在單擊事件_Click()_DblClick()中啟動計時器(如果計時器未使用Application.OnTime開啟)。
  2. 1秒后自動停止計時。
  3. 檢查 1 秒內有 3 次點擊。

代碼:

這是你正在嘗試的嗎?

將此粘貼到用戶表單中

Option Explicit

Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long

Private Sub UserForm_Click()
    ClicksCount
End Sub

Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    ClicksCount
End Sub

Private Sub ClicksCount()
    If TimerOn = False Then StartTimer

    '~~> Check for the first click
    If StartTick = 0 Then
        StartTick = GetTickCount
        ClickCount = ClickCount + 1
    Else
        EndTick = GetTickCount
        ClickCount = ClickCount + 1
    End If

    If ClickCount > 2 Then
        MsgBox "Triple clicked"
        StartTick = 0: EndTick = 0: ClickCount = 0
    End If
End Sub

將其粘貼到模塊中

Option Explicit

Public StartTick As Long, EndTick As Long, ClickCount As Long
Public TimerOn As Boolean
    
Sub StartTimer()
    StartTick = 0: EndTick = 0: ClickCount = 0: TimerOn = True
    Application.OnTime Now + TimeValue("0:00:01"), "StopTimer"
End Sub

Sub StopTimer()
    StartTick = 0: EndTick = 0: ClickCount = 0: TimerOn = False
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM