Вот функция, которую я нашел в Интернете, чтобы помочь перебрать значения и выбрать элементы сводного фильтра, соответствующие значениям. Моя проблема в том, что массив, созданный в Sub Filter_Bana, не загружается значениями из диапазона с именем «Bana» (aka varItemList). Диапазон «Бана» состоит из примерно двадцати чисел (целых чисел). Когда я запускаю sub (внизу), я продолжаю получать MsgBox «Нет элементов списка фильтров, найденных» из функции. Я пытался понять это на некоторое время и не думаю, что любой из названных целых списков «Бана» загружается в «varItemList». Другими словами, когда varItemList передается функции, массив пуст. См. Код:Почему массив VBA не загружает целые числа
** EDIT: Я нашел проблему. Проблемы, которые у меня были связаны с двумя проблемами: 1) Я плохо разбираюсь в VBA, 2) тип данных элементов поворота в моем поле поворота не соответствовал типу данных массива. Я переключил компоненты массива на 5-символьный текст и скорректировал SQL-запрос, чтобы ввести мой номер инвестора в виде 5-символьного текста (т. Е. Массив должен был быть загружен символьной строкой, а для моего поля поворота нужны данные типа символа; если есть способ сделать это с целыми числами, я хотел бы знать. **
Private Function Filter_PivotField(pvtField As PivotField, _
varItemList As Variant)
Dim strItem1 As Long, blTmp As Boolean, i As Long
On Error Resume Next
Debug.Print varItemList
Application.ScreenUpdating = False
With pvtField
If .Orientation = xlPageField Then .EnableMultiplePageItems = True
For i = LBound(varItemList) To UBound(varItemList)
blTmp = Not (IsError(.PivotItems(varItemList(i)).Visible))
If blTmp Then
strItem1 = .PivotItems(varItemList(i))
Exit For
End If
Next i
If strItem1 = "" Then
MsgBox "None of filter list items found."
Exit Function
End If
.PivotItems(strItem1).Visible = True
For i = 1 To .PivotItems.Count
If .PivotItems(i) <> strItem1 And _
.PivotItems(i).Visible = True Then
.PivotItems(i).Visible = False
End If
Next i
For i = LBound(varItemList) To UBound(varItemList)
.PivotItems(varItemList(i)).Visible = True
Next i
End With
Application.ScreenUpdating = True
End Function
Sub Filter_Bana()
Filter_PivotField _
pvtField:=Sheets("Pres1&2_Pivot").PivotTables("PivotTable1").PivotFields("investorNumber"), _
varItemList:=Application.Transpose(Sheets("Controls").Range("Bana"))
End Sub`
Первая остановка с чем-либо подобным - избавиться от статусов «На ошибках возобновления следования» t и на самом деле [отлаживать ваш код] (http://www.cpearson.com/excel/DebuggingVBA.aspx) –
'Debug.Print varItemList' вы не можете отлаживать. print массив, подобный этому –
Извините Macro Man. Неплохо подмечено. – AGryckiewicz