2013-11-21 46 views
0

我有一個多工作表工作簿,它有許多窗體控件(不是ActiveX)複選框。我正在尋找一些VBA,當它被選中時(True),它將改變所有複選框的背景(填充)顏色。我看過單個複選框的代碼,但沒有看到多個/全部複選框。我知道VBA足夠危險,但我正在學習任何新的東西。VBA更改複選框填充顏色選中

+0

'我看過單個複選框的代碼'只需將該代碼放置在複選框的單擊事件中的子用途中即可。你將不得不爲此使用'Application.Caller'。 –

回答

1

繼我的評論,看看這個例子。

CheckBox3Sheet1CheckBox2Sheet2

Sub CheckBox3_Click() 
    Dim actvWs As Worksheet 
    Dim CB As String 

    Set actvWs = ActiveSheet 
    CB = Application.Caller 

    ColorCB actvWs, CB 

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

Sub CheckBox2_Click() 
    Dim actvWs As Worksheet 
    Dim CB As String 

    Set actvWs = ActiveSheet 
    CB = Application.Caller 

    ColorCB actvWs, CB 

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

Sub ColorCB(ws As Worksheet, Cbox As String) 
    With ws.Shapes(Cbox) 
     '~~> 13 is for Yellow, 1 is for White 
     .Fill.ForeColor.SchemeColor = IIf(.ControlFormat.Value = xlOn, 13, 1) 
     .Fill.Visible = msoTrue 
    End With 
End Sub 

如果所有所有的複選框的_Click()是相同的模塊中,那麼你可以在模塊的頂部,這樣你不動這兩條線不得不在每個Sub中聲明它們。

Dim actvWs As Worksheet 
Dim CB As String 
+0

不錯的答案。如果會有很多複選框,那麼創建一個自定義類可能是有意義的,該自定義類需要一個複選框「With Events」 - 並在此處提供'_Click'事件的代碼。那麼你只需要將所有複選框分配給那些「包裝器」 - 並且只有一個'_Click'事件... –

+0

@PeterAlbert:絕對:) –