Получите значение критерия в пользовательской отфильтрованной метке строки сводной таблицы

Метка строки TGL в сводной таблице фильтруется с помощью пользовательского фильтра, как показано на рисунке ниже. Получите значение критерия в пользовательской отфильтрованной метке строки сводной таблицы

Что мне нужно, так это код vba, чтобы узнать, какое значение критерия отфильтровано TGL. (В данном случае значение критерия — «1 января 2022 года»), поэтому мне не нужно запускать макрос с избыточным кодом, например sub test1 ниже:

Sub test1()
Dim dt As String
dt = Format(DateAdd("m", -2, Format("01/" & Month(Date) & "/" & Year(Date))), "dd-mmmm-yyyy")

With ActiveSheet.PivotTables("ptHarga").PivotFields("TGL")
    .ClearAllFilters
    .PivotFilters.Add Type:=xlAfterOrEqualTo, Value1:=dt
End With
  
End Sub

Хотя меня это не задевает, но sub test1 снова и снова фильтрует TGL по одним и тем же критериям, хотя предыдущее состояние TGL уже отфильтровано по этим критериям.

Итак, я делаю подпрограмму, в которой используется IF.... :

Sub test2()
Dim dtNow As Date
dtNow = Format(DateAdd("m", 1, Format("01/" & Month(Date) & "/" & Year(Date))), "dd-mmm-yyyy")

With ActiveSheet.PivotTables("ptHarga").PivotFields("TGL")
    For Each pit In .PivotItems
        If DateDiff("m", CDate(pit), dtNow) = 3 Then Call test1: Exit For
    Next
End With
  
End Sub

В подтесте 2 dtNow используется только для предположения, что макрос запускается в апреле 2022 года. если разница в месяце составляет 3 месяца от любого элемента сводки TGL, то пришло время изменить критерии на «1-февраль-2022» (вызовите test1).

Я также пробовал другой саб, используя application.min, без цикла.

Sub test3()
Dim dtNow As Date
dtNow = Format(DateAdd("m", 1, Format("01/" & Month(Date) & "/" & Year(Date))), "dd-mmm-yyyy")

With ActiveSheet.PivotTables("ptHarga").PivotFields("TGL")
    .ClearAllFilters
    If DateDiff("m", CDate(Application.Min(.DataRange)), dtNow) = 3 Then Call test1
End With
  
End Sub

Из любопытства, мой вопрос :
Есть ли код, который может напрямую получить значение критерия в текущем отфильтрованном TGL поля сводной таблицы?

Будем очень признательны за любой ответ.
Заранее благодарю.

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Например:

Dim pt As PivotTable, pf As PivotField

Set pt = ActiveSheet.PivotTables(1)
With pt.PivotFields("Date").PivotFilters(1)
    Debug.Print "Type", .FilterType
    Debug.Print "Value1", .Value1
End With

См.: https://docs.microsoft.com/en-us/office/vba/api/excel.pivotfilter

Это именно то, что я ищу. Большое спасибо, Тим Уильямс. (и спасибо за ссылку).

karma 23.03.2022 14:44

Другие вопросы по теме