VBA EventHandler两次射击?

时间:2012-02-14 09:28:04

标签: vba ms-access-2003

我有MS Access 2003 DB。

表单上的按钮的事件处理程序是否可以触发两次?

我似乎有证据证明这种情况正在发生,因为我有一个工资单流程 记录整个过程和过程在日志中重复。

我认为这在VBA中是不可能的???

编辑: 我发现事实上,当用户点击两次并将事件排队两次时它确实发射了两次。 这是我对代码所做的修复,它使用标志m_locked作为示例来测试:

[代码]

Private m_locked As Boolean
Private m_count As Integer

Private Sub Command0_Click()
On Error GoTo Err_Command0_Click

' wait

If Not m_locked Then
    m_locked = True
    Dim startTime As Date
startTime = Now()

While DateDiff("s", startTime, Now()) < 3
    DoEvents
Wend

' increment counter

    m_count = m_count + 1
    Command0.Caption = m_count

     m_locked = False
End If

Exit_Command0_Click:
    Exit Sub

Err_Command0_Click:
    MsgBox Err.Description
    Resume Exit_Command0_Click

End Sub

[/代码]

马尔科姆

2 个答案:

答案 0 :(得分:0)

看到你的“解决方案”我也建议你指定双击事件。这样您就可以轻松区分用户是否通过“debug.print”单击了一次或两次。

要防止用户执行额外的单击,请在表单模块级别声明一个私有布尔变量,在事件过程中将其设置为TRUE,在timer事件中将其设置为FALSE,并将表单的计时器配置为1000,例如(它是毫秒)。

Option Explicit
Option Compare Database

Private oneClick As Boolean

Private Sub cmdMyButton_Click()

    If not oneClick Then 
        ' Perform your actions here
    End If

    oneClick = True

End Sub

Private Sub Form_Timer()

    oneClick = False

End Sub

哦,请使用告诉其含义的变量和控制名称: - )

答案 1 :(得分:0)

如果您不希望用户单击按钮两次,则只需以下简单代码:

Private Sub Command0_Click()
   Command0.Enabled = False
   ' Continue with your code here ...
End Sub