Вставка результатов функции Hyperion Smart View VBA в список и / или диапазон листа
Я видел ответы на вопросы, подобные этому, но я не смог найти ничего, что касалось именно этой ситуации.
Цель: заполнить список и / или рабочий лист выводом функции HypQueryMembers. Например, я хотел бы получить список потомков счета 10100 без необходимости выполнять специальный запрос и увеличивать масштаб. Я знаю, как получить код возврата, например, 0 в случае успеха, но мне нужен фактический вывод. Я нашел какой-то код, который заполнил список, но я не смог заставить его работать на меня. Я получаю сообщение об ошибке "Не удалось установить свойство списка. Недопустимый индекс массива свойств". Мой код выглядит следующим образом:
Sub TestQueryMbrs()
Dim X As Integer
Dim arrAccounts
X = HypQueryMembers(Empty, "10100", HYP_DESCENDANTS, Empty, Empty, Empty, Empty, arrAccounts)
If X <> 0 Then
MsgBox "Unable to populate members." & vbCr & vbCr & "Error: " & X, vbCritical + vbOKOnly
Else
UserForm2.ListBox1.List = arrAccounts
UserForm2.Show
End If
End Sub
Есть идеи, что я делаю не так? Кроме того, я хотел бы выполнить то же самое, но заполнить рабочий лист, а не список. Но по одному шагу за раз!
Спасибо!
1 ответ
Является ли 10100 подлинным названием области? Я подозреваю, что вы называете его учетной записью, что вместо 10100 следует заменить учетной записью, так как этот параметр, по-видимому, ограничен именем поля, а не отдельным членом. Однако мне еще предстоит определить, как получить потомков определенного аккаунта / центра затрат, поэтому ваш путь может быть правильным способом сделать это.
Я бы посоветовал попробовать изменить это значение только на "Account", а затем попробовать добавить Dim arrAccounts в качестве варианта, а затем вообще удалить Dim arrAccounts, если это не сработает.
Возможно, вы также не сможете заполнить список до того, как появится Userform2? Вы можете обернуть application.screenupdating =FALSE, а затем TRUE вокруг изменений Userform2, чтобы пользователь не увидел заполненный список, если есть задержка.
У меня была та же проблема сегодня, и я наткнулся на этот пост - я понимаю, что это лет...
Документация Oracle по этой функции немного сбивает с толку... по крайней мере, пример, который они использовали внизу страницы: https://docs.oracle.com/cd/E72988_01/DGSMV/ch12s15.html
Например, вам нужно ввести integer
значение для HYP_DESCENDANTS, которое 2
вместо текста, показанного в вашем коде.
Ниже приведен хороший фрагмент кода для проверки вашего массива:
Declare PtrSafe Function HypQueryMembers Lib "HsAddin" (ByVal vtSheetName As Variant, ByVal vtMemberName As Variant, ByVal vtPredicate As Variant, ByVal vtOption As Variant, ByVal vtDimensionName As Variant, ByVal vtInput1 As Variant, ByVal vtInput2 As Variant, ByRef vtMemberArray As Variant) As Long
Sub Example_HypQueryMembers()
sts = HypQueryMembers("INSERT WORKSHEET NAME HERE", "INSERT SMARTVIEW MEMBER HERE", 1, Empty, Empty, Empty, Empty, vArray)
If IsArray(vArray) Then
cbItems = UBound(vArray) + 1
MsgBox ("Number of elements = " + Str(cbItems))
For i = 0 To UBound(vArray)
MsgBox ("Member = " + vArray(i))
Next
Else
MsgBox ("Return Value = " + Str(vArray))
End If
End Sub