我有一些按钮控件可以解决冗长的处理问题。我是否必须担心用户按下按钮并在第一次执行时激活另一次执行?
我发现我可以使用点击事件来禁用按钮,调用处理例程,然后启用按钮。但是,如果处理程序失败,这似乎充满了危险。
我可以在点击例程中添加错误内容以捕获失败,但处理例程中的任何错误调用都会取消这些错误吗?
答案 0 :(得分:2)
根据经验,我发现期望您可能看到多个并行执行更安全,并计划避免它们。尝试使用和不使用标记线并重复单击按钮:
Sub CommandButton1_Click()
Static InProgress As Boolean
If InProgress Then Exit Sub 'try commenting out...
InProgress = True
Debug.Print "starting...."
DoProcessing
Debug.Print "....Done"
InProgress = False
End Sub
Sub DoProcessing()
Dim x As Long, v
For x = 1 To 1000
ActiveSheet.Cells(x, 1).Copy ActiveSheet.Cells(x, 2)
DoEvents
Next x
End Sub
此特定行为是由DoEvents
调用引起的 - 如果没有这个,您不应该看到并行运行,正如enderland所说。
答案 1 :(得分:1)
我决定在其点击处理程序中禁用该按钮,然后在调用处理例程后重新启用它。
Private Sub CommandButton2_Click()
Dim s As Integer
s = CommandButton2.Enabled
If s Then
On Error GoTo Fail
CommandButton2.Enabled = False
GetData
Fail:
CommandButton2.Enabled = True
End If
End Sub
我还发现这比删除默认嵌入式公式= EMBED(“Forms.CommandButton.1”,“”)并附加宏更令人满意。
答案 2 :(得分:0)
我得到了与enderland相反的结果,表格或表格上的按钮(表格菜单中的按钮)。我设置了一个静态变量,每次按下按钮时都会递增,如果我在代码运行时按下它,它会再次运行并递增。所以我说是的,你需要设置一个全局变量来处理这个:
Sub CommandButton1_Click()
Static Incrementer As Long
Dim i As Long
Incrementer = Incrementer + 1
For i = 1 To 1000
Debug.Print Incrementer
Next i
End Sub