首页 文章

Bloomberg Data花费时间加载Excel-VBA

提问于
浏览
0

enter image description here我目前使用bloomberg数据编写代码 . 我正在尝试使用VBA将Bloomberg的数据导入excel . 这工作正常但问题是我有另一个宏,然后从bloomberg复制数据并将其粘贴到另一个工作表中 .

如果数据还没有全部从bloomberg输出,那么我最终没有足够的数据来复制然后粘贴到另一张纸上 .

目前,我正在使用这行代码:Application.OnTime Now TimeValue(“00:01:45”),“RunAll”

在运行第一个宏1分45秒后等待它运行剩余的宏 . 它很有用,但很长时间 . 问题在于这是数据输出所需的时间 .

有没有其他更有效的方法让我通过确保数据更快地输出到Excel中来更快地获取bloomberg数据?

谢谢!

1 回答

  • 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
    

相关问题