2012-05-22 78 views
2

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

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

在此先感谢

回答

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 
+0

感谢您的快速回答。为什么我在VBA代码中做了一些事情:S – Kano

+0

为什么?我喜欢任何有“VB”的东西吗? ;) –

+0

因为我刚刚在几天内使用过VBA,但还不知道所有的事情。我知道很多来自C#的东西,但我不能“移植”所有东西。 – Kano

0

我只是想提供任何达不到这个来自谷歌的替代方法(即宁愿不使用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 

,那么你可以使用SetFormButtonEnabled功能以同样的方式,你会使用ActiveX按钮的button.Enabled属性,并使用GetFormButtonEnabled在执行单击宏之前检查按钮是否已启用。

要使用这些回答最初的问题,有一个名为btnTest1-3按钮(我创建名字后有这种约定的按钮,但Button 1-3也将正常工作),然后单击宏btnTest1_Click(再次mimicing该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