Несколько обновлений Oracle Smartview не работают в цикле (работает, когда я перешагиваю код)
У меня есть следующий код, который работает как талисман, когда я пошагово пересекаю его (или даже когда я делаю только 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
1 ответ
Мы обращаемся к онлайн-документации для HypMenuVReresh
где указано, что
HypMenuVRefresh() извлекает данные в активный лист и помещает данные в начало активного листа.
Источник: https://docs.oracle.com/cd/E12032_01/doc/epm.921/html_hsv_user/hsv_help-13-63.htm
Следовательно, решение можно найти, активировав целевой лист (т.е. wsPL.Activate
в этом случае) прямо перед выполнением HypMenuVReresh
,
Поэтому, как правило, рекомендуется всегда активировать целевой лист до того, как HypMenuVRefresh
так как HypMenuVRefresh
не будет выдавать ошибку, если обновляется лист, который не подключен к кубу Hyperion. Дополнительно, HypConnected()
Можно объявить, чтобы проверить, подключен ли лист к кубу Hyperion (то есть с возможностью обновления Hyperion), прежде чем обновлять его.
HypConnected () возвращает истинное значение, если лист подключен к поставщику, и возвращает ложное значение, если лист не подключен.