2012-05-22 79 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