У меня сводная таблица из ssas-соединения. В таблице используются несколько опорных полей. Для этого примера предположим, что это размер, цвет и местоположение. Моя цель - написать некоторую vba, где я передаю диапазон ячеек и получить значение соответствующих pivotfields.Получить значение pivotfields для конкретной ячейки
Например, если я передаю диапазон ячеек для B6
, я хочу знать, что эта ячейка находится из location2 в color2 для size1. Если я прохожу диапазон B8
я получаю LOCATION1, color3, Size1 и т.д.
Вот что я могу сделать до сих пор. Я могу получить значение формулы для этой ячейки. Вот результат для B6: GETPIVOTDATA("[Measures].[myValues]",$A$1,"[d size].[size]","[d size].[size].&[Size1]","[d color].[color]","[d color].[color].&[Color2]","[d location].[location]","[d 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
Я также могу перебрать pivotfields и получить их имена, (но я не знаю, как получить их значения) [Measures].[myValues]
, [d size].[size]
и т.д .. . с этим кодом:
With Worksheets("Sheet1").PivotTables(1)
For i = 1 To .PivotFields.Count
MsgBox .PivotFields(i).Name
Next
End With
Мой вопрос теперь, как я могу получить значение этих pivotfields для конкретной ячейки. Я хотел бы иметь возможность отправлять B6
и получить обратно, или иметь доступ к: location2
, Color2
, Size1
Edit:
Получение ближе ... Теперь я могу Переберите каждого поля и получить их имена и значения как этот [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
Одна ошибка в коде. Первый 'if' должен иметь' strOut = "Не опорную ячейку" '. Эта функция вернет '[d size]. [Size]: [d size]. [Size] & [Size1]' и т. Д. Таким образом, это похоже на некоторые из моих попыток. У него есть вся обработка ошибок, в которой очень хорошо, но я хочу пойти еще дальше и получить только значение 'Size1' или' [Size1] 'и т. Д. –
Я только опубликовал этот ответ (который является прямым копия записи RoryA) в качестве указателя на то, как циклически перебирать различные значения категорий (в 'RowItems' и' ColumnItems'), связанные с определенной ячейкой «значение». Если вы хотите использовать общий подход, вы можете передать имя поля и вернуть значение из кода, как только найдете поле с именем, которое вы ищете. –
Смотрите мой обновленный код. –