多个Oracle Smartview刷新不能在循环中工作(当我逐步执行代码时)

当我逐行执行(或者甚至当我只执行1或2个循环迭代然后触发其余的时候)时,我有下面这些代码。 当我从一个button运行它时,代码不起作用,因为Hyperion Retrieve从来没有更新部门的每次迭代更改。 部门本身得到正确的更改(从Excel和PDF文件中可以看出)。

因此,简而言之,代码的工作原理没有看到或陷入错误,但是结果是一组具有相同数据的PDF,但是按下button运行时会标记为不同的部门。

我已经search了很多DoEvents ,尝试使用DoEventsApplication.Wait没有成功。 有没有人有任何想法如何确保从button按下运行时刷新每个循环迭代发生?

 Option Explicit Declare Function HypMenuVRefresh Lib "HsAddin.dll" () As Long Sub CreateAllPDFS() '... setup code to declare variables and loop range ... 'loop through departments Dim cel As Range For Each cel In rngLoop 'rngLoop declared and set in setup code 'set department on drivers tab wsDrivers.Range("B4").Value = "'" & cel.Value '*** --> tried to wait before the loop (just shot in the dark type thing) 'Application.Wait (Now + TimeValue("00:00:02")) 'pauses for 10 seconds, adjust as needed 'refresh hyperion Dim lngReturn As Long lngReturn = HypMenuVRefresh() ' *** --> tried Do Events 'DoEvents '*** --> tried to wait after the loop 'Application.Wait (Now + TimeValue("00:00:02")) 'pauses for 10 seconds, adjust as needed 'quick error check If lngReturn <> 0 Then MsgBox "Could Not Refresh!" Exit Sub End If 'save as pdf wsPL.ExportAsFixedFormat xlTypePDF, cel.Offset(, 1) & "\" & cel.Offset(, 2) & ".pdf", , , , , , False Next End Sub 

我们参考HypMenuVReresh的在线文档

HypMenuVRefresh()将数据检索到活动工作表中 ,并将数据放在活动工作表的开头。

来源: https : //docs.oracle.com/cd/E12032_01/doc/epm.921/html_hsv_user/hsv_help-13-63.htm#528899

因此,在执行HypMenuVReresh之前,通过激活目标工作表(即本例中的wsPL.Activate )来find解决scheme。

所以,一般来说,最好在HypMenuVRefresh之前始终激活目标工作表,因为如果刷新未连接到Hyperion多维数据集的工作表, HypMenuVRefresh不会抛出错误。 此外,可以声明HypConnected()以检查表单是否连接到Hyperion多维数据集(即Hyperion可刷新),然后再刷新它。

如果工作表连接到提供程序,则HypConnected()返回一个真值,如果工作表未连接,则返回一个假值。