Excel 2010 - 禁用按钮

时间:2012-05-22 10:40:01

标签: button excel-vba false-positive vba excel

我的电子表格中有3个不同的表单按钮。我想在按下一个时禁用其中的两个。这可能吗?

在C#中,按钮可以是true或false,但我在VBA Excel 2010中找不到任何这样的示例?

提前致谢

2 个答案:

答案 0 :(得分:2)

您无法禁用表单按钮。如果要使用该功能,请使用ActiveX按钮。

然而,还有另一种选择。创建2个公共布尔变量,然后在按钮1的单击事件中将变量设置为True或False。根据布尔变量,其他2个按钮将运行其代码。例如

Option Explicit

Dim enableB2 As Boolean, enableB3 As Boolean

Sub Button1_Click()
    If enableB2 = False Then
        enableB2 = True: enableB3 = True
    Else
        enableB2 = False: enableB3 = False
    End If

    '
    '~~> Rest of the code
    '
End Sub

Sub Button2_Click()
     If enableB2 = True Then
        '
        MsgBox "Hello You clicked Button 2"
        '
     End If
End Sub

Sub Button3_Click()
     If enableB3 = True Then
        '
        MsgBox "Hello You clicked Button 3"
        '
     End If
End Sub

答案 1 :(得分:1)

我只是想为谷歌的任何人提供一种替代方法(不喜欢使用ActiveX按钮):而不是使用全局Boolean变量,当禁用按钮时,您可以在按钮中显示灰色,并在运行宏之前检查分配给按钮的宏中的文本颜色。

例如,如果您有以下子项:

Public Sub SetFormButtonEnabled(ByVal oWks As Object, ByVal sName As String, ByVal bValue As Boolean) As Boolean
    If blnValue Then
       ' Enabled: black text
       oWks.Shapes(sName).TextFrame.Characters.Font.ColorIndex = 1
    Else
       ' Disabled: grey text
       oWks.Shapes(sName).TextFrame.Characters.Font.ColorIndex = 16
    End If
End Sub

和功能:

Public Function GetFormButtonEnabled(ByVal oWks As Object, ByVal sName As String) As Boolean
    ' Enabled if text colour is black, otherwise it is disabled
    GetFormButtonEnabled = (oWks.Shapes(sName).TextFrame.Characters.Font.ColorIndex = 1)
End Function

然后您可以像使用ActiveX按钮的SetFormButtonEnabled属性一样使用button.Enabled函数,并在执行单击之前使用GetFormButtonEnabled检查按钮是否已启用宏。

使用这些来回答最初的问题,使用名为btnTest1-3的按钮(我在创建后用这种约定命名按钮,但Button 1-3也可以正常工作)并单击宏{{ 1}}(再次模仿ActiveX约定,但可以命名为任何东西):

btnTest1_Click