#excel #vba
#excel #vba
Вопрос:
Исходное сообщение было удалено, поскольку изменился контекст вопроса.
У меня есть сводная таблица, которую я пытаюсь отфильтровать, а затем захватить только отфильтрованные данные, однако, похоже, у меня не получается захватить правильные данные фильтра.
Вот исходная таблица:
Сводная таблица:
Применен фильтр:
Сводная таблица:
Нет, когда я запускаю свой код, он не фиксирует данные, которые я вижу, которые отфильтрованы, он по-прежнему считывает ВСЮ дату для fk_new_component.
Код:
Sub Results_06_Filter_Pivot_Table(myArray As Variant)
Set tmpltWkbk = Workbooks("New DB.xlsm")
Set ws1 = tmpltWkbk.Sheets("Pivot")
Set PvtTbl = ws1.PivotTables("PivotTable")
'Array of fk_keyword unique values
myArr = myArray
Application.ScreenUpdating = False
PvtTbl.ManualUpdate = True
Set pvtField = PvtTbl.PivotFields("fk_keyword")
With pvtField
.Orientation = xlPageField
.Position = 1
End With
PvtTbl.ManualUpdate = False
ws1.Activate
For i = LBound(myArr) To UBound(myArr)
If i <> 0 Then
pvtField.ClearAllFilters
pvtField.CurrentPage = myArr(i)
With ws1
Set compField = PvtTbl.PivotFields("fk_new_component")
'For Each PvtItem In PvtTbl.VisibleFields
For Each Pi In compField.PivotItems
If Pi <> "" And Pi.Visible Then
i = i 1
ReDim Preserve arrCompElements(i)
arrCompElements(i) = PvtItem.Name
End If
Next Pi
End With
End If
Next i
'pvtField.ClearAllFilters
For Each pvtField In PvtTbl.PageFields
pvtField.Orientation = xlHidden
Next pvtField
Application.ScreenUpdating = True
PvtTbl.ManualUpdate = False
End Sub
Комментарии:
1. Не
pvtField.ClearAllFilters
делает все элементы видимыми? Таким образом, проверкаIf Pi <> "" And Pi.Visible Then
по существу становитсяIf Pi <> "" Then
2. @Nacorid Спасибо за ответ. Я проверил, но фильтр не очищается. Фильтр по-прежнему применяется и отображает правильные данные. Также удалены
Application.Screen updating = True
иPivotTable.ManualUpdate = True
. Инструкция очищает все существующие фильтры, но новый фильтр применяется непосредственно после.3. Вы пробовали запускать код без строки
pvtField.ClearAllFilters
, я, честно говоря, не понимаю, почему он там вообще. ClearAllFilters указывает, что все примененные фильтры удалены.4. @Nacorid да, когда вы упомянули об этом, это было первое, что я сделал — удалил это. Запустил код без этого, но все равно получил тот же результат. Что касается того, почему это там, это для того, чтобы убедиться, что в строке, где я применяю фильтр, применяется только этот фильтр. Если в таблице уже есть какие-либо другие фильтры, то это просто добавит к ним. Ну, вот как я это понимаю в любом случае… Я могу ошибаться..
5. Но где вы применяете какой-либо фильтр? Вы удаляете фильтры только с помощью
pvtFiled.ClearAllFilters
на каждой итерации по вашему массиву.