Eli*_*ias 3 ms-access user-controls vba
我在表单上有一个按钮,从表单上的列表框中获取RowSource,创建Excel,工作表和查询表对象,将信息查询到excel,然后将其全部格式化.问题是如果用户快速按下鼠标按钮,他或她将多次激活此按钮.
我试图让代码在中间休眠,但这只会导致按下每个按钮的时间与睡眠一样长,然后查询所需的时间长.我用过的:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Run Code Online (Sandbox Code Playgroud)
我也尝试将焦点设置为另一个控件并禁用按钮,但我不确定如何在设定的时间后重新启用它,因为即使将它放在sub的末尾,Access仍会执行按钮按下每个按钮.
有什么建议?
首次单击时,请禁用命令按钮,而不是等待一段固定的时间.然后执行长时间运行的操作,然后再次启用命令按钮.
假设命令按钮的名称是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
Run Code Online (Sandbox Code Playgroud)
请注意,SetFocus在禁用命令按钮之前必须使用不同的控件,因为Access仍然具有焦点时不允许您禁用它.
你可能不想SetFocus回到最后的命令按钮---我只是对那个做了一个疯狂的猜测.:-)
似乎代码流控制在长时间运行的进程完成之前返回到click事件过程.因此,命令按钮会再次启用.
在这种情况下,您可以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
Run Code Online (Sandbox Code Playgroud)
我现在意识到这就是你首先要求的.对不起,我很厚.