2016-10-20 2 views
0

Я работаю со следующим кодом:Фильтр Сводные таблицы с Checkbox

Option Explicit 
Sub checkboxfilter() 
    Dim cb As CheckBox 
    Dim oWS As Worksheet 
    Dim oWB As Workbook 
    Dim oPvt As PivotTable 
    Dim oPvtField As PivotField 
    Dim oPvtFilter As PivotFilter 


    Set cb = oWS("Control").Controls("YTD Filter") 

If cb.Value = True Then 
    For Each oWS In ThisWorkbook.Worksheets 
     For Each oPvt In oWS 
      With oPvtField 
      .CurrentPage.Name = "Yes" 
      End With 
     Next oPvt 
    Next oWS 
End If 

End Sub 

цель состоит в том, чтобы переключить каждую сводную таблицу в книге с помощью фильтра Ер до даты через флажком. Код попадает под замятие под set cb= в качестве переменной объекта или с не установленным. Что мне здесь не хватает, чтобы заставить этот контроль работать? Я также избегаю использования slicer.

Спасибо.

ответ

0

Этот вид управления имеет свое собственное событие, и вы должны его использовать. Поэтому:

  1. перейти к листу, где у вас есть флажок
  2. набор Design mode на вкладке Разработчик на
  3. двойной щелчок на вас check box, чтобы ...
  4. ... увидеть что-то вроде Private Sub CheckBox1_Click()
  5. внутри этого подзаголовка подзаголовок:

    Private Sub CheckBox1_Click() 
        call checkboxfilter 
    End Sub 
    
+0

Спасибо, что не разрешает фильтрацию с вышеуказанным кодом. – GregdeLima

+0

вы спросили, как запускать действие с помощью флажка :) при просмотре кода вам кажется, что вам все равно нужно связать ваш 'oPvt' с полями поворота. в настоящий момент 'oPvtField' кажется' Nothing'. –

0

Я был в состоянии пересмотреть на основе корректировки типа формат, который set cb = как .Checkboxes и обеспечение на каждом поворотном fielt был точно называется @KazimierzJawor указывал. Кроме того, для этого типа значение должно быть 0 или 1, а не True или False. Исправлен и окончательный код ниже.

Private Sub checkboxfilter() 
    Dim cb As CheckBox 
    Dim oWS As Worksheet 
    Dim oWB As Workbook 
    Dim oPvt As PivotTable 
    Dim oPvtField As PivotField 
    Dim oPvtFilter As PivotFilter 


Set cb = Sheets("Control").CheckBoxes("YTD Filter") 

If cb.Value = 1 Then 
    For Each oWS In ThisWorkbook.Worksheets 
     For Each oPvt In oWS.PivotTables 
      With oPvt.PivotFields("YTD?") 
      .CurrentPage = "Yes" 
      End With 
     Next oPvt 
    Next oWS 
    Else 
      For Each oWS In ThisWorkbook.Worksheets 
      For Each oPvt In oWS.PivotTables 
       With oPvt.PivotFields("YTD?") 
       .CurrentPage = "(All)" 
       End With 
      Next oPvt 
     Next oWS 
End If 

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