繁体   English   中英

彭博数据历史记录显示VBA宏效率

[英]VBA-Macro efficiency with Bloomberg Data History

我是VBA的新手。 我编写了这段代码,并且可以运行,但是要花很多时间才能运行,而且我感觉到它运行的时间越长,它的运行速度就会越来越慢。

有什么办法可以使这样的事情更有效率吗? 如果有人在这里为我提供一些建议,那将很棒。

Sub Sheets()
Application.ScreenUpdating = False
ActiveWindow.WindowState = xlMinimized

Dim Data As String
Dim i As Long
Dim k As Long
Dim x As Long
Dim y As String


For i = 2 To 255

Sheetname = Worksheets("Input").Cells(i, 1).Value
Worksheets.Add.Name = Sheetname
ActiveSheet.Move After:=Worksheets(ActiveWorkbook.Sheets.Count)

x = 1

For k = 2 To 876
Data = Worksheets("Input").Cells(i, k).Value
y = Cells(1, x).Address(RowAbsolute:=False, ColumnAbsolute:=False)
BloomB = "=BDH(" & y & ",""TURNOVER"",""8/1/2011"",""4/30/2016"",""Dir=V"",""Dts=S"",""Sort=A"",""Quote=C"",""QtTyp=Y"",""Days=T"",""Per=cd"",""DtFmt=D"",""UseDPDF=Y"")"
Worksheets(Sheetname).Cells(1, x) = Data
Worksheets(Sheetname).Cells(2, x) = BloomB
x = x + 2
Next k

Application.Wait (Now + TimeValue("0:00:03"))
Next i

ActiveWindow.WindowState = xlMaximized
Application.ScreenUpdating = True
End Sub

删除Application.Wait (Now + TimeValue("0:00:03")) 或者将“ Next i放在其上方,如下所示:

Next i
Application.Wait (Now + TimeValue("0:00:03"))

您将获得大约43分钟的时间。

如果您仍然喜欢等待的想法,可以将其复杂一些,例如:

If i Mod 50 = 0 Then Application.Wait (Now + TimeValue("0:00:02"))
Next i

因此,它将每第50次迭代等待一次。

难道不是全部转换为沿着A2 =offset(Input!B1,row(),0)和B2 =BDH(ADDRESS(ROW(),1,4),""TURNOVER.....如公式只是被向下填充?

除了我对硬编码的评论。 这是一些代码,以防止重复调用静态数据函数

Option Explicit

Sub Test()

    Dim rng As Excel.Range
    Set rng = Worksheets(1).Cells(1, 1)

    rng.Formula = "=SIN(PI()/4)"  '* a formula is in fact constant

    '* in some instances Evaluate will suffice
    Dim vHardcodedFormulaResult As Variant
    vHardcodedFormulaResult = Application.Evaluate("SIN(PI()/4)")

    rng.Offset(1, 0).Value2 = vHardcodedFormulaResult

    '* in other cases Application.Run will be needed and also multi-cell return results

    Dim vHardcodedFormulaResult2 As Variant
    vHardcodedFormulaResult2 = Application.Run("FakeBDH", "Citi", "FakeParam")

    Dim lIndex As Long
    lIndex = 0
    Dim vLoop As Variant
    For Each vLoop In vHardcodedFormulaResult2

        rng.Offset(2, lIndex) = vLoop
        lIndex = lIndex + 1
    Next vLoop


End Sub


Function FakeBDH(ByVal sKey As String, ByVal vParam1) As Variant
    FakeBDH = Array(2015, 45000)
End Function

抱歉,您到底要做什么? 您是否需要股票的时间序列数据? 是的,请尝试下面的链接。

http://investexcel.net/multiple-stock-quote-downloader-for-excel/

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM