【问题标题】:Refreshing 3rd Party API Within a VBA Loop在 VBA 循环中刷新第 3 方 API
【发布时间】:2020-05-30 23:27:10
【问题描述】:

我正在尝试在 VBA 中运行一个循环,该循环将刷新第三方数据、将输出复制/粘贴为值、将 API 周期更改为更早的日期并在循环上运行它。我认为,我的问题是 VBA 在复制/粘贴下一组值之前不会等待第三方数据刷新。我使用 FactSet 作为 API 并提取一些非常简单的数据。

i = 我的相对日期范围。我从 -1(等于上个月)开始,我希望循环在重新开始刷新和复制/粘贴之前继续将本月字段向后移动一个。

ExecuteExcel4Macro 刷新整个工作簿的 FDS 代码 - 这工作正常。

第三组代码应该等到FDS代码刷新,不再抛出错误,复制/粘贴输出。

i 变量没有改变,FDS 代码刷新太频繁,循环只是一遍又一遍地复制/粘贴相同的数据。

非常感谢任何帮助。

Dim i As Long
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
ws.Activate

i = ws.Range("E3")

Do While i > -5
    ws.Range("E3").Value = i - 1

ExecuteExcel4Macro "FDSFORCERECALC(FALSE)"

Sheets("Sheet2").Select
    If Application.WorksheetFunction.CountIfs(Range("4:4"), "#DIV/0!") > 0 Then
    'Check every 3 seconds
        Application.OnTime Now + TimeValue("00:00:03"), "Check_API"
    Else
        With Sheets("Sheet2")
        lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
        End With

        Sheets("Sheet2").Select
        Rows("4:4").Select
        Selection.Copy
        Rows(lastRow).Select
        Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
             xlNone, SkipBlanks:=False, Transpose:=False

   End If
Loop

End Sub

【问题讨论】:

    标签: vba


    【解决方案1】:

    你想做什么?

    i = ws.Range("E3")
    
    Do While i > -5
        ws.Range("E3").Value = i - 1
    

    看起来你的循环永远不会结束循环,因为你的 i 变量总是相同的

    如果要减少计数器,请尝试使用:

    i = ws.Range("E3")
    
    Do While i > -5
      i = i - 1
        ws.Range("E3").Value = i
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      相关资源
      最近更新 更多