Как выбрать несколько сводных элементов с помощью формулы в VBA из поля сводки - PullRequest
1 голос
/ 18 апреля 2019

Я пытаюсь использовать VBA, чтобы выбрать все организации, которые имеют H или N в качестве четвертого символа.

Я пытался изменить код, чтобы выбрать только H или N, и это работает.Также этот код работает, если я поменяю знак, выбрав все, что не H или N.

Sub Select_H_and_N_Organizations_View()

Dim WS As Worksheet
Dim PT As PivotTable
Dim PF As PivotField
Dim PI As PivotItem
Dim blnCheck As Boolean

blnCheck = False
Set WS = ActiveWorkbook.ActiveSheet

If WS.PivotTables.Count > 0 Then

Set PT = WS.PivotTables(1)
PT.ManualUpdate = True

Set PF = PT.PivotFields("Organization")
    For Each PI In PF.PivotItems
        If Mid(PI.Name, 4, 1) = "H" Or Mid(PI.Name, 4, 1) = "N" Then
            blnCheck = True
        End If
    Next PI

    If blnCheck = True Then
Set PF = PT.PivotFields("Organization")
    For Each PI In PF.PivotItems
        If Mid(PI.Name, 4, 1) = "H" Or Mid(PI.Name, 4, 1) = "N" Then
            If PI.Visible = False Then
                PI.Visible = True
            End If
        End If
    Next PI
    For Each PI In PF.PivotItems
        If Mid(PI.Name, 4, 1) <> "H" Or Mid(PI.Name, 4, 1) <> "N" Then
            If PI.Visible = True Then
                PI.Visible = False ''This is where code breaks
            End If
        End If
    Next PI        
    Else
        MsgBox "There are no H or N Organizations available.", vbOKOnly, "Pivot Tables"
    End If

 End If

 PT.ManualUpdate = False
 Set WS = Nothing
 Set PT = Nothing
 Set PF = Nothing
 Set PI = Nothing

 End Sub

1 Ответ

0 голосов
/ 18 апреля 2019

Сначала вы проверили, есть ли какой-либо опорный пункт, отвечающий вашим критериям. Это правильно, так как хотя бы один пивотит должен оставаться видимым.

Затем вы переключили каждый желаемый пивотит видимым.

Наконец, вы хотите скрыть все нежелательные. Там вам просто нужно изменить ваше условие с Or на And, так как в противном случае ваше условие всегда выполняется (все будет невидимым, а ошибка возникнет на последнем сводном элементе, так как он должен оставаться видимым):

If Mid(PI.Name, 4, 1) <> "H" And Mid(PI.Name, 4, 1) <> "N" Then
...