Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 获取特定单元格的数据透视字段值_Vba_Excel_Pivot Table - Fatal编程技术网

Vba 获取特定单元格的数据透视字段值

Vba 获取特定单元格的数据透视字段值,vba,excel,pivot-table,Vba,Excel,Pivot Table,我有一个来自ssas连接的数据透视表。表中使用了多个数据透视字段。对于本例,假设它们是大小、颜色和位置。我的目标是编写一些vba,在其中传递单元格范围并获取相应数据透视字段的值 例如,如果我通过B6的单元格范围,我想知道该单元格来自大小为1的color2中的location2。如果我通过范围B8我会得到位置1、颜色3、尺寸1等 以下是我目前能做的。我可以得到这个单元格的公式值。以下是B6的结果:GETPIVOTDATA(“[Measures].[myValues]”,$A$1,“[d size

我有一个来自ssas连接的数据透视表。表中使用了多个数据透视字段。对于本例,假设它们是大小、颜色和位置。我的目标是编写一些vba,在其中传递单元格范围并获取相应数据透视字段的值

例如,如果我通过
B6的单元格范围,我想知道该单元格来自大小为1的color2中的location2。如果我通过范围
B8
我会得到位置1、颜色3、尺寸1等

以下是我目前能做的。我可以得到这个单元格的公式值。以下是B6的结果:
GETPIVOTDATA(“[Measures].[myValues]”,$A$1,“[d size].[size]”,“[d size].[Size1]”,“[d color].[color]”,“[d color].[Color2]”,“[d location].[location]”,“[d location].[location].[location].[location].[location].[location2]”,
使用此代码:

Function xxx(ByVal xyz As Range) As Variant
  xxx = xyz.Formula
End Function
Sub blah()
  MsgBox (xxx(ActiveWorkbook.Sheets("Sheet1").Range("D13")))
End Sub
With Worksheets("Sheet1").PivotTables(1)
    For i = 1 To .PivotFields.Count
        MsgBox .PivotFields(i).Name
    Next
End With
我还可以循环数据透视字段并获取它们的名称(但我不知道如何获取它们的值)
[Measures].[myValues]
[d size].[size]
等等。。。使用此代码:

Function xxx(ByVal xyz As Range) As Variant
  xxx = xyz.Formula
End Function
Sub blah()
  MsgBox (xxx(ActiveWorkbook.Sheets("Sheet1").Range("D13")))
End Sub
With Worksheets("Sheet1").PivotTables(1)
    For i = 1 To .PivotFields.Count
        MsgBox .PivotFields(i).Name
    Next
End With
我现在的问题是,如何获取特定单元格的这些数据透视字段的值。我希望能够发送
B6
并返回,或者访问:
location2
Color2
Size1

编辑:

越来越近。。。现在,我可以循环遍历每个字段并获得它们的名称和值,如
[d size].[size]&[Size1]
等,但现在我只想获得
Size1
[Size1]
的值:

Sub Test()
  Dim iRange As Variant
  iRange = ActiveCell.Address
  FieldPicker (iRange)
End Sub

Function FieldPicker(targetCell As Variant) As Variant
  With Range(targetCell).PivotCell
      For i = 1 To .RowItems.Count
          MsgBox .RowItems(i).SourceName
      Next
  End With
End Function

根据RoryA的回答改编如下:


代码中有一个bug。第一个
if
应具有
strOut=“非透视单元格”
。此函数将返回
[d size].[size]:[d size].[size]&[Size1]
等。因此它与我的一些尝试类似。它确实内置了所有的错误处理,这非常好,但我想更进一步,只获取
Size1
[Size1]
等的值。我只发布了这个答案(这是RoryA文章的直接副本),作为如何循环各种类别值的指针(在与特定“值”关联的
行项目
列项目
)单元格。如果您想要的是一种通用方法,那么您可以传入一个字段名,并在找到具有您要查找的名称的字段后从代码中返回一个值。嘿,这是一个很好的功能+1。现在是我最初问题中最难解决的部分。从您的更新中,我仍然得到
[d size].[size]&[Size1]
vba是否允许我在不解析字符串的情况下仅获取该字符串的结尾?
这确实是我想要返回的值。我想我没有遵循您真正想要做的。您可以使用我发布的代码来获取与特定值单元格关联的特定字段的值。我没有遵循您的意思n通过“解析”字符串或从中获得
[d size].[size]&[Size1]
的确切位置。您发布的代码返回
[d size].[size]&[Size1]
我想让它返回
Size1
。我已经知道
Size1
来自
d size
维度。你知道vba能否在
之后给我这个值吗?