如何定期运行excel宏并将更新的数据粘贴到新列中

时间:2014-10-26 11:04:09

标签: excel vba excel-vba

我目前有一个API已加入我的excel,从URL下载股票价格。列A2:A194是公司名称,B2:B194是相应的股票价格。

我想创建一个macro,每5分钟运行一次,获取新价格并将它们粘贴到相邻的列中。

这是我迄今为止所取得的成就:

[Sub GetPrice()
    '
    ' GetPrice Macro
    '
    ' Keyboard Shortcut: Ctrl+q
    '
    ActiveWorkbook.RefreshAll
    ActiveCell.Offset(0, -1).Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    ActiveCell.Offset(0, 1).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveCell.Offset(-1, 0).Range("A1").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=NOW()"
    ActiveCell.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveCell.Offset(1, 0).Range("A1").Select
    Application.CutCopyMode = False
    ActiveCell.Offset(0, 1).Range("A1").Select

    Application.OnTime Now + TimeValue("00:05:00"), "GetPrice"

    End Sub]

此宏从前一列而不是B2:B194中提取数据。我该如何改变?

例如:在1小时结束时,我希望14列有数据:原始的2 + 12列,每5分钟获取一次。

1 个答案:

答案 0 :(得分:1)

为什么它从前一栏中拉出来。这是因为您使用Offset而不是声明要特定使用的列。如果你知道它会是:

Sheets("Sheet1").Range("B2:B194")

然后只需编辑定义该部分的宏。

宏是了解代码中发生了什么的好方法,但我总是将它们编辑为更高效或更容易阅读。主要是因为很多宏依赖于用户不断点击和激活单元格,这对于某处插入值或要执行的函数不是必需的。你也可以很快看到后台发生的一切,看起来有问题。