2016-07-07 85 views
0

enter image description here我目前有一個使用bloomberg數據編寫的代碼。我正試圖使用​​VBA將彭博的數據轉化爲excel。這工作正常,但問題是,我有另一個宏,然後將數據從bloomberg中複製並粘貼到另一個表中。彭博數據抽取時間在Excel中加載-VBA

如果數據還沒有從bloomberg輸出,那麼我最終沒有足夠的數據複製然後粘貼到另一個表單中。

目前,我使用這行代碼:Application.OnTime現在+ TIMEVALUE(「零時01分45秒」),「RunAll」

其運行第一個宏1分分鐘45秒,直到它之後等待運行剩餘的宏。這是有用的,但要花很多時間。問題在於這是數據輸出需要多長時間。

有沒有其他更有效的方式讓我更快地拉入彭博數據,確保數據更快地輸出到excel中?

謝謝!

+0

加載單元格是否包含特定的字符串?也許你可以運行一個循環或攔截Worksheet.Change事件來檢查這個字符串。 – silentsurfer

+0

請提供示例代碼。我不知道彭博數據是什麼,所以請提出更通用的問題。你是否使IE自動獲取數據?你在建立數據庫連接嗎? –

+0

你如何檢索數據?如果你以編程的方式來做,你將不必像這樣等待...... – assylias

回答

0

處理它的一種方法是,當你開始你的第二個宏複製數據,檢查看看中點單元是否是空的(類似於A100的東西??看到你的代碼在這裏會有所幫助...... )。如果是這樣,請等待10秒鐘再次檢查。這將迫使第二個宏在第一個宏趕上時保持持有模式。

儘管如此,我會設置一個最大數量的循環,否則如果由於某種原因數據不能下載,它不會掛斷你的機器。

更新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

感謝菲利普,還沒有嘗試過,因爲代碼很難理解(我對VBA很新穎)。如果單元格是空白的,它爲什麼會退出sub?我的問題是,當我刷新我的工作表時,BBRG公式所在的單元格將顯示爲N/A Requesting Data,有時可能會使用公式加載單元格,但在輸出剩餘行中的其餘信息時滯後在公式所在的單元格下。 – markos

+0

退出sub(1)的單元格只有兩種,它所在的單元格是空白的,並且所有數據都被拉入,這意味着沒有更多數據,或者(2)您已達到最長時間你願意等。我檢查單元格是否爲空,因爲上面提到「他們可以清除表單內容並刷新表單以提取數據」。如果他們清除表單,我會認爲這意味着它是空的?再次,如果您只需發佈您的代碼,我可以爲您提供更完整的解決方案。 – pheeper