我有下面的代码,当我一行行地遍历它时(甚至当我只通过1或2个循环迭代,然后触发其余的循环迭代时),它就像一个魅力。当我从一个按钮运行它时,代码不起作用,因为Hyperion检索从来不更新我更改的部门的每一次迭代。部门本身会得到正确的更改(从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发布于 2016-09-15 06:13:15
我们参考了HypMenuVReresh的在线文档,其中声明
HypMenuVRefresh()将数据检索到活动工作表中,并将数据放在活动工作表的开头。
因此,通过在执行wsPL.Activate之前激活目标工作表(在本例中为HypMenuVReresh ),可以找到解决方案。
因此,通常情况下,总是在HypMenuVRefresh之前激活目标工作表是很好的做法,因为如果HypMenuVRefresh正在刷新未连接到Hyperion多维数据集的工作表,则不会引发错误。此外,在刷新表之前,可以声明HypConnected()来检查表是否连接到Hyperion多维数据集(即Hyperion刷新功能)。
如果工作表连接到提供程序,则HypConnected()返回真值;如果工作表未连接,则返回假值。
https://stackoverflow.com/questions/39458689
复制相似问题