在处理过程中禁用按钮或其他控件

时间:2012-08-16 21:24:14

标签: excel vba

我有一些按钮控件可以解决冗长的处理问题。我是否必须担心用户按下按钮并在第一次执行时激活另一次执行?

我发现我可以使用点击事件来禁用按钮,调用处理例程,然后启用按钮。但是,如果处理程序失败,这似乎充满了危险。

我可以在点击例程中添加错误内容以捕获失败,但处理例程中的任何错误调用都会取消这些错误吗?

3 个答案:

答案 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