VBA EventHandler стреляет дважды? - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть MS Access 2003 DB.

Возможно ли, чтобы обработчик событий для кнопки в форме запускался дважды ??

Кажется, у меня есть доказательства этого, когда яесть процесс расчета заработной платы, который регистрирует весь процесс, а процесс дублируется в журнале.

Я не думал, что это возможно в VBA ???поскольку пользователь дважды щелкнул мышью и дважды поставил в очередь событие.Это исправление, которое я сделал в коде, который показывает использование флага m_locked в качестве примера для проверки с:

[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 Ответ

0 голосов
/ 23 марта 2012

Увидев ваше «решение», я бы тоже рекомендовал указать событие двойного щелчка.Это позволит вам легко отличить, щелкнул ли пользователь один или два раза по «debug.print».

Чтобы пользователь не мог выполнить дополнительный щелчок, объявите частную логическую переменную на уровне модуля формы, установите егоTRUE в вашей процедуре события, установите его в FALSE в событии timer и настройте таймер вашей формы, например, на 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

Oh, и, пожалуйста, используйте имена переменных и элементов управления, которые сообщаютих значение: -)

...