2017-03-25 34 views
0

我試圖創建類似於「Mastercheckbox」的東西,它會自動檢查我的工作表上的所有其他複選框。所以我試圖啓動下面的VBA代碼,只要我點擊「Mastercheckbox」我使用表單工具而不是Active X創建我的複選框,以確保我的VBA與任何機器兼容(我讀該Active X可能會造成一些問題),並已得到了下面的代碼:在for循環檢查複選框的值,並相應地設置所有其他複選框的值

Sub Mastercheckbox() 

Dim Chk As CheckBox 

With ActiveSheet.Shapes("Mastercheckbox") 
    If .ControlFormat.Value = False Or .ControlFormat.Value = True Then 
     If .ControlFormat.Value = False Then 
      For Each chk In ActiveSheet.CheckBoxes 
       If Not chk.Name = "Mastercheckbox" Then 
       chk.Value = False 
       End If 
      Next chk 
     End If 

     If Not .ControlFormat.Value = True Then 
      For Each chk In ActiveSheet.CheckBoxes 
       If Not chk.Name = "Mastercheckbox" Then 
       chk.Value = True 
       End If 
      Next chk 
     End If 
    Else: MsgBox ("couldn't check value of mastercheckbox") 
    End If 
End With 
End Sub 

一切正常,但檢查Mastercheckbox的只是工作不因某種原因值,並將其直接跳到其他情況。誰能幫我嗎?

回答

3

是不是ActiveX控制,必須對xlOn(相當於1)和xlOff檢查其值'(相當於-4146)

你也可以重構一點你的代碼如下:

Option Explicit 

Sub Mastercheckbox()   
    With ActiveSheet.Shapes("Mastercheckbox") 
     If .ControlFormat.Value = xlNone Then 
      MsgBox ("couldn't check value of mastercheckbox") 
     Else 
      HandleCheckBoxes .ControlFormat.Value 
     End If 
    End With 
End Sub 

Sub HandleCheckBoxes(val As Long) 
    Dim Chk As CheckBox 

    For Each Chk In ActiveSheet.CheckBoxes 
     If Not Chk.name = "Mastercheckbox" Then Chk.Value = val 
    Next Chk 
End Sub 
+0

謝謝,這工作很好!讓我的一天:) –

+0

不客氣。看看我的編輯,稍微縮短代碼 – user3598756

1

由於您決定使用User_Form複選框,因此您需要將變量定義爲Shape。爲了檢查它們的價值,你需要檢查它們是否是xlOnxlOff

爲了看到你讀「Mastercheckbox」的價值一旦它的按下,就可以使用一塊下面的代碼:

Dim MasterCB As Shape 

Set MasterCB = ActiveSheet.Shapes("Mastercheckbox") '<-- set the MasterCB variable 

If MasterCB.ControlFormat.Value = xlOn Then 
    MsgBox "Is checked" 
ElseIf MasterCB.ControlFormat.Value = xlOff Then 
    MsgBox "Not checked" 
End If 

代碼爲您的文章

Option Explicit 

Sub Mastercheckbox() 

Dim Chk As Shape 
Dim MasterCB As Shape 

' set the MasterCB variable 
Set MasterCB = ActiveSheet.Shapes("Mastercheckbox") 

' loop through all shapes in ActiveSheet 
For Each Chk In ActiveSheet.Shapes 
    If Chk.Type = msoFormControl Then '<-- check your shape type is User_Form type 
     If Chk.FormControlType = xlCheckBox Then '<-- check if the shape is a checkbox 
      If Chk.Name <> "Mastercheckbox" Then 
       Chk.ControlFormat.Value = MasterCB.ControlFormat.Value '<-- modify all checkboxes to the value of "Mastercheckbox" 
      End If 
     End If 
    End If 
Next Chk 

End Sub