VBA EventHandler firing twice?

喜欢而已 提交于 2020-03-26 08:57:05

问题


I have MS Access 2003 DB.

Is it possible for an event handler for a button on a form to fire twice??

I seem to have evidence of this happening as I have a payroll process that logs the whole process and process is duplicated in the log.

I didnt think this was possible in VBA???

EDIT: I discovered that indeed it was firing twice as user was clicking twice and queueing the event twice. This is the fix I made to the code which shows using a flag m_locked as an example to test with:

[code]

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

[/code]

Malcolm


回答1:


Seeing your "solution" I'ld recommend to specify the double click event, too. This will allow you to distinguish easily whether the user clicked once or twice by a "debug.print".

To prevent the user to perform an extra click, declare a private boolean variable on form module level, set it to TRUE in your event procedure, set it to FALSE in the timer event, and configure your form's timer to 1000 for example (it's milliseconds).

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

Oh, and please use variable and control names that tell their meaning :-)




回答2:


If you do not want your user click the button twice just this simple code:

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


来源:https://stackoverflow.com/questions/9274458/vba-eventhandler-firing-twice

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!