我有以下代码,当我逐行单步执行时(或者即使我只单步执行 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
最佳答案
我们引用 HypMenuVReresh
的在线文档据说
HypMenuVRefresh() retrieves data into the active sheet, and places the data at the beginning of the active worksheet.
来源: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() returns a true value if the sheet is connected to an provider and returns a false value if the sheet is not connected.
关于oracle - 多个 Oracle Smartview 刷新不在循环中工作(当我单步执行代码时有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39458689/