Я новичок в форуме, поэтому, пожалуйста, побалуйте меня, если мое сообщение не является полным.
У меня есть очень простая сводная таблица с одним полем строки, одним полем столбца, одним полем данных и одним полем фильтра.Поля строк отображаются в зависимости от настроек фильтра.Используя VBA, я собираюсь просмотреть все сводные строки и сводные столбцы столбцов, получить соответствующие имена полей и значения данных и отобразить их в качестве проверки работоспособности.Это начало более крупного проекта.
вот основной цикл (на экране отображается строка):
showstring = ""
For rowFldNo = 1 To pvt.RowFields.Count
For colFldNo = 1 To pvt.ColumnFields.Count
For rowItemNo = 1 To pvt.RowFields(rowFldNo).PivotItems.Count
For colItemNo = 1 To pvt.ColumnFields(colFldNo).PivotItems.Count
If pvt.RowFields(rowFldNo).PivotItems(rowItemNo).Visible And _
pvt.ColumnFields(colFldNo).PivotItems(colItemNo).Visible Then
showstring = showstring & _
pvt.RowFields(rowFldNo).PivotItems(rowItemNo).Name & ": " & _
pvt.ColumnFields(colFldNo).PivotItems(colItemNo).Name & _
"= " & MyGetPivotData(pvt, rowFldNo, rowItemNo, colFldNo, _
colItemNo) & vbCrLf
End If
Next colItemNo
Next rowItemNo
Next colFldNo
Next rowFldNo
MsgBox showstring
MyGetPivotData - это простая подпрограмма, которая скрывает сложность использованияVBA встроенная функция GetPivotData.Вот код:
Function MyGetPivotData(ByRef thisPvt As PivotTable, _
ByVal rowFld As Integer, _
ByVal rowItem As Integer, _
ByVal colFld As Integer, _
ByVal colItem As Integer) As Integer
On Error Resume Next
MyGetPivotData =
thisPvt.GetPivotData(thisPvt.DataFields(thisPvt.DataFields.Count), _
thisPvt.RowFields(rowFld).Name, _
thisPvt.RowFields(rowFld).PivotItems(rowItem).Name, _
thisPvt.ColumnFields(colFld).Name, _
thisPvt.ColumnFields(colFld).PivotItems(colItem).Name).Value
End Function
Код работает нормально, но не выполняет мое намерение.Моя проблема в первом сегменте кода.Я использую свойство Visible перед вызовом MyGetPivotData.Проблема в том, что Visible не меняется с настройкой фильтра - я проверил это, проверив вручную в полях сводной таблицы.Настройка фильтра влияет на то, что видно на экране, но свойство сводного элемента Visible не изменяется и всегда имеет значение True.Следовательно, я перебираю все доступные поля и возвращаю значение GetPivotData 0 для невидимых полей.Это неприемлемо для меня, потому что мои сводные данные могут содержать фактические значения 0.
Мой вопрос: есть ли другие свойства, которые я мог бы использовать, чтобы определить, отфильтрован ли сводный элемент (невидимый и, следовательно, нерелевантный) или нет (видимый)?и актуально).Я попробовал Object Browser в VBA, но ничего не понял.Любые советы будут с благодарностью.
Спасибо