2013-05-29 2 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

Этого код перебирает через все листы (кроме листов названных Sheet100 и OtherSheet) и неустановленных всех ваших 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 флажков во всех листах, не считая имен нас ред

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

Спасибо вам за помощь. Что-то довольно странное: это работает для двух листов, для которых я создал поля вручную; однако он не работает для последующих листов, для которых я просто скопировал флажки и код VBA. Я проверил несколько раз, и имя этих элементов идентично имени, которое я создал вручную. Я действительно не понимаю, почему это не сработает? Создание всех ящиков вручную невозможно, так как у меня слишком много листов для этого. Большое спасибо за вашу помощь. – jcv

+0

@jcv я вижу. Держу пари, что-то действительно простое, вы каким-то образом упустили человека. откройте новую книгу и попробуйте вручную создать несколько флажков и скопируйте их на другие листы. затем запустите этот код и увидите поведение. я тестировал на своей машине, и все работает нормально. В вашем случае поставьте несколько строк 'Debug.Print', чтобы увидеть, действительно ли вы выполняете итерации по всем листам, всем флажкам и т. Д. –

+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

Смежные вопросы