我是一名新手,如果我的帖子不完整,请见谅。
我有一个非常简单的数据透视表,其中包含一个行字段、一个列字段、一个数据字段和一个筛选字段。行字段根据筛选设置进行显示。使用VBA,我的意图是循环遍历所有行透视项和列透视项,并获取相应的字段名称和数据值,并将它们显示为健全性检查。这是一个更大项目的开始。
以下是主要循环(showstring显示在屏幕上):
"最初的回答"
代码可以正常运行,但无法实现我的意图。我问题出在第一个代码段中。在调用MyGetPivotData之前,我使用了Visible属性。问题在于,Visible不随过滤设置而改变 - 我通过手动检查数据透视表字段进行了验证。过滤设置影响屏幕上可见的内容,但是pivotitem Visible属性不会改变,并且始终为True。因此,我正在循环所有可用字段,并且对于非可见字段,GetPivotData返回值为0。这对我来说是不可接受的,因为我的数据透视表可能包含实际的0值。
我的问题是,是否有其他属性可以用来确定pivotitem是否被过滤掉(不可见和因此不相关)还是没有被过滤掉(可见和相关)。我尝试了VBA中的Object Browser,但没有更聪明。任何提示都将不胜感激。
谢谢
我有一个非常简单的数据透视表,其中包含一个行字段、一个列字段、一个数据字段和一个筛选字段。行字段根据筛选设置进行显示。使用VBA,我的意图是循环遍历所有行透视项和列透视项,并获取相应的字段名称和数据值,并将它们显示为健全性检查。这是一个更大项目的开始。
以下是主要循环(showstring显示在屏幕上):
"最初的回答"
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
代码可以正常运行,但无法实现我的意图。我问题出在第一个代码段中。在调用MyGetPivotData之前,我使用了Visible属性。问题在于,Visible不随过滤设置而改变 - 我通过手动检查数据透视表字段进行了验证。过滤设置影响屏幕上可见的内容,但是pivotitem Visible属性不会改变,并且始终为True。因此,我正在循环所有可用字段,并且对于非可见字段,GetPivotData返回值为0。这对我来说是不可接受的,因为我的数据透视表可能包含实际的0值。
我的问题是,是否有其他属性可以用来确定pivotitem是否被过滤掉(不可见和因此不相关)还是没有被过滤掉(可见和相关)。我尝试了VBA中的Object Browser,但没有更聪明。任何提示都将不胜感激。
谢谢