0

我在下面得到了这段代码,它已经在 excel 中工作,我已经有人检查过它以确保它工作但没有足够的时间让 EIKON 计算 A270:A371 中的所有值(股票)。该程序假设将 A270:A371 中的值输入到主页 J2 中,这将对 Investing A249:B260 中的股票给出不同的评级,然后代码继续复制 Investing a249:B260 并开始将值粘贴到每日策略 E5 (G5, I5、K5 等)。您可以通过 A270:A371 中的值看到宏的工作和变化,但它不允许 EIKON 计算为每只股票带来所有价格。当你一次只做一只股票时,它会起作用,但不会通过宏更新。每次将新值粘贴到主页 J2 时,我需要一行代码来告诉 EIKON 更新/计算。


Sub insertVarious()

    'Application.CalculateFullRebuild

    Const hpgName As String = "Homepage"
    Const hpgCell As String = "J2"

    Const invName As String = "Investing"
    Const invAddr As String = "A249:B260"
    Const invAddr2 As String = "A270:A371"

    Const dstName As String = "Daily Strategies"
    Const dstFirst As String = "E5"

    Dim wb As Workbook: Set wb = ThisWorkbook

    Dim hpg As Range: Set hpg = wb.Worksheets(hpgName).Range(hpgCell)
    Dim inv As Range: Set inv = wb.Worksheets(invName).Range(invAddr)
    Dim inv2 As Range: Set inv2 = wb.Worksheets(invName).Range(invAddr2)
    Dim UB1 As Long: UB1 = inv.Rows.Count
    Dim UB2 As Long: UB2 = inv.Columns.Count
    Dim NoA As Long: NoA = inv2.Rows.Count

    Dim Daily As Variant: ReDim Daily(1 To UB1, 1 To NoA * UB2)
    Dim Curr As Variant, j As Long, k As Long, l As Long
    For j = 1 To NoA
        hpg.Value = inv2.Cells(j).Value
        'hpg.Parent.Calculate
        'inv.Parent.Calculate
        Curr = inv.Value
        GoSub writeDaily
    Next j

    wb.Worksheets(dstName).Range(dstFirst).Resize(UB1, NoA * UB2) = Daily

    MsgBox "Data transferred.", vbInformation, "Success"

    Exit Sub

writeDaily:
    For k = 1 To UB1
        For l = 1 To UB2
            Daily(k, (j - 1) * 2 + l) = Curr(k, l)
        Next l
    Next k
    Return

End Sub
4

1 回答 1

0

在 VBA 中处理异步内容总是很痛苦。

  1. 你有没有尝试过Application.Calculate
  2. 你有没有尝试过DoEvents
  3. 你有没有尝试过Application.OnTime

如果时间不可预测,您也可以尝试:

oldValue = someRange.value
While someRange.value = oldValue
  DoEvents
Wend

等到数据出现。

于 2020-06-21T23:19:01.200 回答