我已经看到了与此问题相似的问题的答案,但我还没有找到能解决这一问题的任何问题。
目标:使用HypQueryMembers函数的输出填充列表框和/或工作表。例如,我想获得帐户10100的后代列表,而无需执行即席查询和放大。我知道如何获取返回代码,例如0如果成功,但我想要实际输出。我找到了一些填充列表框的代码,但我还没有能够让它为我工作。我收到错误"无法设置List属性。无效的属性数组索引。"我的代码如下:
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
知道我做错了什么吗?此外,我想完成同样的事情,但填充工作表而不是列表框。但是一步一步!
谢谢!
答案 0 :(得分:0)
10100是该领域的真正名称吗?我怀疑你称它为帐号,10100应该由Account替换,因为该参数似乎仅限于字段名称而不是单个成员。但是,我还没有确定如何获得特定帐户/成本中心的后代,因此您的方式可能是正确的方法。
我建议尝试将此更改改为&#34; Account&#34;虽然然后尝试添加为Dim arrAccounts的变体,然后完全删除Dim arrAccounts,如果它不起作用。
在显示Userform2之前,您可能无法填充列表框?您可以在Userform2更改周围将application.screenupdating = FALSE和TRUE包装起来,这样如果存在延迟,用户就不会看到正在填充的列表框。
答案 1 :(得分:0)
我今天遇到了同样的问题,并且碰到了这篇文章-我知道它已经岁了...
Oracle关于此功能的文档有点令人困惑……至少是他们在页面底部使用的示例:https://docs.oracle.com/cd/E72988_01/DGSMV/ch12s15.html
例如,您需要输入HYP_DESCENDANTS的integer
值,即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