【问题标题】:Excel 2010 - Disable buttonExcel 2010 - 禁用按钮
【发布时间】:2012-05-22 10:40:00
【问题描述】:

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

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

提前致谢

【问题讨论】:

    标签: button excel false-positive vba


    【解决方案1】:

    您不能禁用表单按钮。如果您想使用该功能,请使用 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
    

    【讨论】:

    • 感谢您的快速答复。为什么我说要在 VBA 代码中做某事:S
    • 为什么?我喜欢任何有“VB”的东西? ;)
    • 因为我才用了几天VBA,还不知道一切。而且我从 C# 中了解了很多东西,但我无法“移植”所有内容。
    【解决方案2】:

    我只是想为从 Google 中点击此功能的任何人提供一种替代方法(即不喜欢使用 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 按钮的 button.Enabled 属性一样使用 SetFormButtonEnabled 函数,并在执行 click 宏之前使用 GetFormButtonEnabled 检查按钮是否启用。

    要使用这些来回答最初的问题,使用名为 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
    

    【讨论】:

      猜你喜欢
      • 2015-08-09
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      相关资源
      最近更新 更多