2013-05-29 21 views
3

我希望有一個代碼可以取消選中工作簿中所有工作表中名爲「CheckBox1」的所有複選框。我目前的代碼不幸運行,我不知道爲什麼 - 它只適用於活動工作表。通過CommandButton取消選中整個工作簿中的所有複選框

Private Sub CommandButton1_Click() 

    Dim Sheet As Worksheet 
    For Each Sheet In ThisWorkbook.Worksheets 

     Select Case CheckBox1.Value 
     Case True: CheckBox1.Value = False 
     End Select 
    Next 
End Sub 

回答

5

通過所有紙張此代碼遍歷(除了命名爲Sheet100OtherSheet張)和取消選中所有ActiveX複選框命名CheckBox1

Sub uncheck_boxes() 

    Dim ws As Worksheet 
    Dim xbox As OLEObject 
    For Each ws In ThisWorkbook.Worksheets 
     If ws.Name <> "Sheet100" And ws.Name <> "OtherSheet" Then 
      For Each xbox In ws.OLEObjects 
       ws.OLEObjects("CheckBox1").Object.Value = False 
      Next 
     End If 
    Next 
End Sub 

要取消所有ActiveX複選框在所有工作表中不管我們的名字ED

Sub uncheck_all_ActiveX_checkboxes() 

    Dim ws As Worksheet 
    Dim xbox As OLEObject 
    For Each ws In ThisWorkbook.Worksheets 
     For Each xbox In ws.OLEObjects 
      ws.OLEObjects(xbox.Name).Object.Value = False 
     Next 
    Next 
End Sub 

要取消所有Form Control checkboxes在電子表格中使用

Sub uncheck_forms_checkboxes() 

    Dim ws As Worksheet 
    Dim xshape As Shape 
    For Each ws In ThisWorkbook.Worksheets 
     For Each xshape In ws.Shapes 
      If xshape.Type = msoFormControl Then 
       xshape.ControlFormat.Value = False 
      End If 
     Next 
    Next 
End Sub 
+0

謝謝你的幫助。有些奇怪的事情正在發生:這似乎適用於2張手動工作的紙張;但是,它似乎不適用於後續工作表,爲此我只需複製粘貼複選框和VBA代碼。我檢查了多次,這些項目的名稱與我手動創建的項目相同。我真的不明白爲什麼這不起作用?手動創建所有框不可行,因爲我有太多的表單。非常感謝你的幫助。 – jcv

+0

@jcv我明白了。我敢打賭,你真的很容易忽略一個人。打開一個新的工作簿並嘗試手動創建一些複選框並將其複製到其他工作表中。然後運行此代碼並查看行爲。我在我的機器上測試過,一切正常。在你的情況下,把一些'Debug.Print'行,看看你是否真的遍歷所有的工作表,所有複選框等 – 2013-05-29 16:33:11

+0

Mehow,謝謝你。我做了一些分析,發現了一個新的錯誤 - 請參閱我更新的主文章。當我運行你的VBA代碼時,我在CheckBox代碼中出現錯誤@ Case False [...] ActiveSheet.Shapes等。你能看看嗎? – jcv

2

[編輯以下評論]

試試這個:

Sub test() 
Dim ws As Excel.Worksheet 
Dim s As Object 

For Each ws In ThisWorkbook.Worksheets 
    If ws.Name <> "Definitions" And ws.Name <> "fx" Then 
     Set s = Nothing 
     On Error Resume Next 
     Set s = ws.OLEObjects("CheckBox1") 
     On Error GoTo 0 
     If Not s Is Nothing Then 
      s.Object.Value = False 
     End If 
    End If 
Next ws 

End Sub 

這是一個全球性的功能(它不屬於某個特定的表),但你可以把它裏面CommandButton1_Click()如果你想。

如果您的工作表(定義和fx除外)始終包含CheckBox1,則可能不需要錯誤阻止。或者刪除該if語句。

+0

拔示巴,感謝您的快速回復。我嘗試了你的兩條建議,並且他們產生了一個代碼錯誤,分別指出「預期:表達式」和「對象不支持此屬性或方法」。它們是ActiveX控件元素。 – jcv

+0

您使用的是哪個版本的Excel?而且,複選框是否構成控件或ActiveX控件(或者您不知道)? – Bathsheba

+0

Excel 2007和上述的ActiveX控件 – jcv

相關問題