我有以下代码,当我逐行逐步执行它时(或者甚至当我只通过1或2次循环迭代然后触发其余部分)时,它就像魅力一样工作。当我从一个按钮运行它时代码不起作用,因为Hyperion Retrieve永远不会更新为我更改的部门的每次迭代。部门本身也得到了正确的更改(从Excel和生成的PDF文件中可以看出)。
因此简而言之,代码可以处理没有看到或被捕获的错误,但结果是一组具有相同数据的PDF,但在按下按钮时标记为不同的部门。
我已经在网上搜索了很多,尝试使用DoEvents
和Application.Wait
没有成功。有没有人有任何想法如何确保从按下按钮运行时每次循环迭代都会发生刷新?
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
答案 0 :(得分:1)
我们参考HypMenuVReresh
的在线文档,其中说明了
HypMenuVRefresh()将数据检索到 活动工作表 ,并将数据放在活动工作表的开头。
来源:https://docs.oracle.com/cd/E12032_01/doc/epm.921/html_hsv_user/hsv_help-13-63.htm#528899
因此,通过在执行wsPL.Activate
之前激活目标工作表(在本例中为HypMenuVReresh
)找到解决方案。
因此,通常,最好始终在HypMenuVRefresh
之前激活目标工作表,因为HypMenuVRefresh
如果刷新未连接到Hyperion多维数据集的工作表,则不会抛出错误。此外,可以声明HypConnected()
以检查工作表是否连接到Hyperion多维数据集(即Hyperion可刷新),然后再刷新。
如果工作表连接到提供程序,则HypConnected()返回true值,如果工作表未连接,则返回false值。