2016-07-07 2 views
0

enter image description here 현재 블룸버그 데이터를 사용하여 작성된 코드가 있습니다. 블룸버그의 데이터를 VBA를 사용하여 Excel로 끌어 내려고 노력 중입니다. 그것은 잘 작동하지만 문제는 블룸버그에서 데이터를 복사 한 다음 다른 시트에 붙여 넣는 또 다른 매크로가 있다는 것입니다.Bloomberg Excel에서 데이터로드에 걸리는 시간 - VBA

데이터가 모두 bloomberg에서 출력되지 않은 경우 복사하기에 불충분 한 데이터가있는 것으로 끝나고 다른 시트에 붙여 넣습니다.

현재, 나는이 코드 줄을 사용하고 있습니다 : Application.OnTime 이제 + TIMEVALUE ("0시 1분 45초을"), "RunAll"그것까지 1 분 45 초에 대한 첫 번째 매크로를 실행 한 후 대기

나머지 매크로를 실행합니다. 그것은 유용하지만 많은 시간을 보내는 길입니다. 문제는 이것이 데이터가 출력되는 데 걸린 시간입니다.

블룸버그 데이터를 신속하게 끌어 올릴 수있는 더 효율적인 방법은 데이터가 엑셀로 빠르게 출력되도록하는 것입니다.

감사합니다.

+0

로딩 셀에 특정 문자열이 있습니까? 어쩌면 루프를 실행하거나 Worksheet.Change 이벤트를 가로 채어이 문자열을 검사 할 수 있습니다. – silentsurfer

+0

예제 코드를 입력하십시오. 블룸버그 데이터가 무엇인지 모르겠으니 질문을 좀 더 일반적인 것으로 만드십시오. IE를 자동화하여 데이터를 가져오고 있습니까? 데이터베이스 연결을 만들고 있습니까? –

+0

어떻게 데이터를 검색합니까? 프로그래밍 방식으로하면 다음과 같이 기다릴 필요가 없습니다. – assylias

답변

0

데이터를 복사하는 두 번째 매크로를 시작하고 중간 점 셀이 비어 있는지 확인하십시오 (A100과 비슷한 것). 여기에서 코드가 도움이 될 것입니다 ...). 그렇다면 10 초 후에 다시 확인하십시오. 이렇게하면 두 번째 매크로가 처음 패턴을 잡는 동안 홀딩 패턴을 유지하게됩니다.

그러나주의해야 할 점은 데이터를 다운로드하지 않으면 루프가 끊어지지 않을 것이므로 최대 개수의 루프를 설정해야합니다.

UPDATE 1 :

난 당신이 뭘 하려는지 달성하기 위해 아래의 코드를 썼다. 현재 코드를 작성하는 데 필요한 몇 가지 사항이 있지만 의도적으로 주석을 달아서 따를 수 있어야합니다. 이게 효과가 있는지 알려주세요.

Public boolBloombergCompleted As Boolean 

Sub GetBloombergData() 

    'add this line after the data grab is complete 
    boolBloombergCompleted = True 
End Sub 


Sub WriteData() 
    Dim iRow As Integer 
    Dim boolTimeOut As Boolean 

    'change the last number as fit, make sure it's larger than the number of rows of data you're pulling in though 
    For iRow = 1 To 1000 

     ' Check to see if the cell is blank 
     If Sheet1.Cells(iRow, 1) = vbNullString Then 
      ' If the cell is blank and GetBloombergData has completed then exit sub 
      If boolBloombergCompleted = True Then 
       Exit Sub: Debug.Print "WriteData completed" 
      Else 
       ' Call the wait function below 
       boolTimeOut = WaitForDataGrabToCatchUp(Sheet1.Cells(iRow, 1)) 
       If boolTimeOut = True Then GoTo TimeOutErr: 
      End If 
     End If 

     ' < Add your code to write data in here > 

    Next iRow 

    Exit Sub 

TimeOutErr: 
    MsgBox "The write sub timed out while waiting for data to load", vbExclamation 

End Sub 

Function WaitForDataGrabToCatchUp(rng As Range) As Boolean 
    Dim StartTime1 As Long 
    Dim StartTime2 As Long 
    Dim PauseTime As Long 
    Dim StopTime As Long 

    ' Set the amount of time to pause between checking the spreadsheet for updates 
    PauseTime = 5 'seconds 

    ' Set the maximum amount of time to wait before timing out 
    StopTime = 60 'seconds 

    ' StartTime1 is used for calculating overall time 
    StartTime1 = Timer 

    Do While rng = vbNullString 
     ' check if the StopTime has been reached 
     If Timer - StartTime1 > StopTime Then 
      WaitForDataGrabToCatchUp = True 
      Exit Function 
     Else 
      ' loop for amount of PausedTime (the DoEvents part here is key to keep the data grab moving) 
      StartTime2 = Timer 
      Do While Timer < StartTime2 + PauseTime 
       Debug.Print Timer - StartTime1 
       DoEvents 
      Loop 
     End If 
    Loop 

    WaitForDataGrabToCatchUp = False ' means it did not time out 

End Function 
+0

위의 코드 사진을 첨부했습니다. 먼저 Bloomberg 데이터를 Excel에로드합니다. 그 후 사람들이 파일을 다시 열면 시트 내용을 지우고 시트가 새로 고쳐져 변경된 경우 데이터를 추출 할 수 있습니다. 새로 고침 후 나머지 매크로가 실행될 때까지 1 분 45 초 동안 기다리는 타이머를 넣었습니다. 이것은 내가 톤을 시험해보고 싶은데, 데이터가 새로 고침되고 더 빠른 속도로 완전히 출력되도록하는 방법을 찾지 만 어떻게해야할지 모르겠다. 감사! – markos

+0

감사합니다 필립, 코드가 이해하기 힘들 정도로 abit하기 때문에 아직 시도하지 않았습니다. (VBA를 처음 접했습니다). 셀이 비어 있으면 왜 서브를 빠져 나갈 수 있습니까?내 문제는 내 워크 시트를 새로 고칠 때 BBRG 수식이있는 셀은 N/A 요청 데이터라고 말하고 때로는 수식이있는 셀을로드 할 수 있지만 나머지 행의 나머지 정보를 출력 할 때 지연됩니다. 수식이있는 셀에서 – markos

+0

하위 셀을 종료하는 데는 두 가지 방법 밖에 없습니다. (1) 셀이 비어 있고 모든 데이터가 꺼내 졌으므로 더 이상 데이터가 없습니다. 또는 (2) 최대 시간에 도달했습니다. 기다릴 의향. 나는 당신이 위에 언급했기 때문에 셀이 비어 있는지 확인합니다. "시트 내용을 지우고 시트를 새로 고침하여 데이터를 추출 할 수 있습니다." 그들이 시트를 지우면 그게 비어 있다는 뜻인가요? 다시 말하지만, 코드를 게시 할 수 있다면 더 완벽한 솔루션을 제공 할 수 있습니다. – pheeper