2016-09-12 8 views
2

다음과 같이 코드를 단계별로 실행할 때 매력이 있습니다. 1 또는 2 루프 반복 후 나머지는 발사). 단추로 실행할 때 코드가 변경되지 않으면 Hyperion Retrieve가 변경되는 각 반복마다 업데이트되지 않습니다. 부서 자체가 올바르게 변경됩니다 (Excel 및 결과 PDF 파일에서 볼 수 있음).다중 Oracle Smartview 새로 고침이 루프에서 작동하지 않음 (코드를 단계별로 실행하면 작동)

간단히 말해 코드는 보이지도 트래핑 된 오류없이 작동하지만 결과는 동일한 데이터가있는 PDF 세트입니다. 버튼 프레스에서 실행될 때 다른 부서로 분류되어 있습니다.

나는 그물을 닦은 후, DoEventsApplication.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

나에게 눈 오프너에서이 질문에 ... 나는 그것을 인터넷 검색을 시작하고 docs.oracle.com "HypMenuVRefresh()에서이 문장을 발견은 *** 활성 시트 ***에 데이터를 검색하고 배치 활성 워크 시트 시작 부분의 데이터. " 따라서 버튼에서 실행했을 때 활성 시트가 ​​잘못된 시트 일 수 있습니까? – Rosetta

+0

@Rosetta에 감사드립니다! 그랬어. 'HypMenuVRefresh()'호출 바로 전에'wsPL.Activate'를 놓았고 버튼에서 실행할 때 완벽하게 작동했습니다! 당신이 대답을하면 나는 upvote하고 받아 들일 것입니다. –

+0

나는 그것이 도움이 된 것을 기쁘게 생각한다. :) – Rosetta

답변

1

우리는

HypMenuVRefresh()가 활성 시트에 데이터를 검색하고, 활동의 시작 부분에 데이터를 배치하는 것이 적혀있다 HypMenuVReresh에 대한 온라인 설명서를 참조하십시오 워크 시트.

자료 : 따라서 용액 대상 워크를 활성화함으로써 발견 https://docs.oracle.com/cd/E12032_01/doc/epm.921/html_hsv_user/hsv_help-13-63.htm#528899

(즉이 경우 wsPL.Activate) 오른쪽 HypMenuVReresh 실행 전에.

일반적으로보다 먼저 대상 워크 시트를 활성화하는 것이 좋습니다. HypMenuVRefresh은 Hyperion 큐브에 연결되지 않은 워크 시트를 새로 고치면 오류가 발생하지 않기 때문입니다. 또한 HypConnected()을 새로 고치기 전에 시트가 Hyperion 큐브에 연결되어 있는지 (즉, Hyperion refreshable) 확인하도록 선언 할 수 있습니다.

시트가 공급자에 연결되어 있으면 HypConnected()가 true 값을 반환하고 시트가 연결되어 있지 않으면 false 값을 반환합니다.