2

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

在 C# 中,按钮可以是真或假,但我在 VBA Excel 2010 中找不到任何示例?

提前致谢

4

2 回答 2

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
于 2012-05-22T10:53:36.413 回答
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一样使用该功能,并在执行 click 宏之前检查按钮是否启用。button.EnabledGetFormButtonEnabled

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

Public Sub btnTest1_Click()
    If Not GetFormButtonEnabled(Me, "btnTest1") Then Exit Sub
    SetFormButtonEnabled Me, "btnTest2", False
    SetFormButtonEnabled Me, "btnTest3", False
    ' Do some work...
End Sub

Public Sub btnTest2_Click()
    If Not GetFormButtonEnabled(Me, "btnTest2") Then Exit Sub
    ' Do some work...
End Sub

Public Sub btnTest3_Click()
    If Not GetFormButtonEnabled(Me, "btnTest3") Then Exit Sub
    ' Do some work...
End Sub
于 2013-07-30T13:45:41.170 回答