我在Excel 2010环境中使用ADOMD 6.1将自定义MDX查询发送到Analysis Services 2008 R2多维数据集并在Excel工作簿中显示结果。到目前为止,此工作正常,但Excel实例在等待Analysis Services服务器返回查询结果时冻结,并且某些查询可能会运行几分钟。
我可能会使用线程将Connection外包给另一个线程,但根据此处提出的其他一些问题,这在VBA本身是不可能的 - 我们确实有限制不使用DLL,因为我们需要将生成的Excel及其宏分发给某些最终用户,并且安装DLL不是一个选项。使用内置的Excel-Pivot表也不是一个选项,因为我们依赖于MDX函数,如intersect和exists。
在不使用外部DLL的情况下,是否存在使用VBA中的ADOMD向Analysis Services服务器发送查询的非阻塞方法?
Dim ObjConnection As New ADODB.Connection
Dim rs As New ADODB.Recordset
ObjConnection.Open strCon
rs.Open strMDX, ObjConnection
Do While Not rs.EOF
For i = 0 To rs.Fields.Count - 1
Cells(i, 1).Value = rs.Fields(i).Name
Cells(i, 2).Value = rs.Fields(i).Value
Next
rs.MoveNext
Loop
非常感谢!
答案 0 :(得分:1)
是的,可以做到。您需要启动Excel应用程序的另一个实例(在后台,因此您可以隐藏它)并获取该实例以便为您运行宏。
关键步骤是
Set newexcel = New Application
Set newworkbook = newexcel.Workbook.Open("Path goes here")
' newworkbook is of Workbook data type
Dim MacroName as String
ArgumentMacroName = "'" & SomeStringArgument & "'!ModuleName.YourSubName"
Output = newexcel.Run(MacroName, ThisWorkbook.Name) 'Output is of the returned data type
在新工作簿中,您可以包含要运行的宏并传递此字符串参数ByVal
。
由于应用程序是隐藏的,因此它对用户完全透明,并且可以在其他活动进行时返回值。
上讨论