【问题标题】:VBA Access 2003 Only Allow Press Button Once Within Reasonable Amount Of TimeVBA Access 2003 只允许在合理的时间内按下按钮一次
【发布时间】:2013-07-25 18:33:27
【问题描述】:

我在表单上有一个按钮,它从表单的列表框中获取行源,创建 Excel、工作表和查询表对象,将信息查询到 excel 中,然后将其全部格式化。问题在于,如果用户快速按下鼠标按钮,他或她将激活此按钮的次数与此相同。

我曾尝试将代码置于中间睡眠状态,但这只会导致每次按下按钮的持续时间与睡眠时间一样长,然后无论查询花费多长时间。我用过的:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

我也尝试将焦点设置到另一个控件并禁用按钮,但我不太确定如何在设定的时间后重新启用它,因为即使将它放在子的末尾,Access 仍然每次按下按钮时执行按钮。

有什么建议吗?

【问题讨论】:

    标签: vba ms-access user-controls


    【解决方案1】:

    第一次单击时禁用命令按钮,而不是等待固定的时间。然后进行长时间运行的操作,然后再次启用命令按钮。

    假设命令按钮的名字是cmdToExcel ...

    Private Sub cmdToExcel_Click()
        Me.txtNote.SetFocus
        Me.cmdToExcel.Enabled = False
        ' replace next line
        MsgBox "call long running code here"
        Me.cmdToExcel.Enabled = True
        Me.cmdToExcel.SetFocus
    End Sub
    

    请注意,在禁用命令按钮之前,您必须 SetFocus 到不同的控件,因为 Access 不允许您在它仍然具有焦点时禁用它。

    你可能不想 SetFocus 回到最后的命令按钮 --- 我只是对那个做了一个疯狂的猜测。 :-)

    似乎代码流控制在长时间运行的过程完成之前返回到单击事件过程。因此命令按钮过早地再次启用。

    在这种情况下,您可以在调用长时间运行的代码后使用Sleep API 声明插入暂停。

    Private Sub cmdToExcel_Click()
        Me.txtNote.SetFocus
        Me.cmdToExcel.Enabled = False
        ' replace next line
        MsgBox "call long running code here"
        Sleep 5000 ' 5 seconds
        Me.cmdToExcel.Enabled = True
        Me.cmdToExcel.SetFocus
    End Sub
    

    我现在意识到这就是你最初要求的。对不起,我很厚。

    【讨论】:

    • 我已经尝试过了,只是再次尝试确定,每次按下按钮它仍然执行“长时间运行的代码”。
    • 嗯。 “长时间运行的代码”是否在它(长时间运行的代码)完成之前将控制权返回给cmdToExcel_Click?在cmdToExcel_Click 中插入断点,如果需要检查,请单步执行代码。
    • 它没有,焦点停留在单独的控件上。我什至尝试在我的变量初始化之前放置“enable = false”!
    • 你很好,我的措辞很糟糕!您的第二个解决方案实际上是我首先使用 sleep 功能所做的。遗憾的是,它不会禁用然后等待 5 秒,而是会在每次单击按钮时调用并在每次单击之间进行睡眠。
    • 我也在考虑尝试设置一个全局位,根据按钮的执行情况为真/假,但我真的不想使用全局变量。
    【解决方案2】:

    假设您希望按钮被禁用不少于 5 秒

    Me.cmdButton.Enabled = False
    timing = Dbl(Now())
    '
    ' query code
    '
    timing = Dbl(Now()) - timing
    seconds = Int(CSng(timing * 24 * 3600))
    If seconds < 5 Then
        Sleep (5 - seconds) * 1000
    End If
    Me.cmdButton.Enabled = True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多