У меня есть отчет, который генерируется каждый месяц, который показывает нехватку и перевыполнение всех ПО, проданных в этом месяце. Я создаю макрос, который форматирует данные таким образом, чтобы показывать только то, какие накладные имели перерасход. Я построил большую часть макроса для динамической работы, но на моем пути есть только еще одна проблема. На активном листе есть 2 сводные таблицы, PivotTable1 фильтруется, чтобы отображать только счета-фактуры с перерасходами, поэтому я пошел дальше и написал код для хранения всех значений в ArrayA. Теперь мне нужно PivotField PivotTable2 ("Inv"), чтобы отобразить счета в ArrayA. Код, который у меня есть, теперь выполняется, но он просто просматривает каждый элемент Pivot в этом поле и скрывает его. Кажется, что есть проблема с тем, какое значение проверяется, когда он решает, скрывать или нет элемент Pivot или нет, или я считаю, что способ включения массива неправильный. В любом случае вот мой код:
Sub OverageArray()
Dim ArrayA() As Variant
Dim Counter As Integer
Dim RowCount As Long
Dim PT As PivotTable
Dim PTItm As PivotItem
Set PT = ActiveSheet.PivotTables("PivotTable2")
RowCount = (Range("A1048576").End(xlUp).Offset(-1, 0).Row - 3)
ReDim ArrayA(RowCount)
'For Loop that Builds the Array
For Counter = 0 To RowCount
ArrayA(Counter) = Cells((Counter + 4), 1).Value
Next
'This Filters the Pivot Field Based on the Array's Values
For Each PTItm In PT.PivotFields("Inv#").PivotItems
If Not IsError(Application.Match(PTItm.Caption, ArrayA, 0)) Then ' check if current item is not in the filter array
PTItm.Visible = True
Else
PTItm.Visible = False
End If
Next PTItm
End Sub