如何在excel中捕获实时数据

时间:2016-04-18 17:47:34

标签: excel vba

我有一个与实时数据相关联的单元格(A1)(= Tickers!Z12)。我希望在五分钟内捕获所有价格范围。我的问题是我正在尝试使用Worksheet_Change方法,但如果单元格(A1)的公式化,则值不会更新。如果我手动更改值,它工作正常。但我需要捕获公式生成的值,然后复制&每次值更改时粘贴B列中的值。这是我到目前为止所拥有的。

 Private Sub Worksheet_Change(ByVal Target As Range)

 Application.ScreenUpdating = False
 Application.EnableEvents = False

 If Range("A1").value <> Range("B2").value Then
    Range("A1").Select
    Selection.Copy
    With ActiveSheet
      LastRow = .Cells(.rows.Count, "B").End(xlUp).row + 1
      .Cells(LastRow, 2).Select
      Selection.PasteSpecial Paste:=xlPasteValues
    End With

 End If

 Application.CutCopyMode = False
 Application.EnableEvents = True

 End Sub

2 个答案:

答案 0 :(得分:0)

尝试使用Worksheet_Calculate事件。

另外,我不确定你想比较A1和B2。逻辑规定你应该将它与B列中的最后一个单元格进行比较。

另外,使用Activesheet并不是一个好主意,因为重新计算可能发生在任何其他工作表上,并且您不想在随机工作表上写入值。

还有一件事:不要在宏中使用复制粘贴。只需要.Value = .Value。

Private Sub Worksheet_Calculate()

Dim lngLastRow As Long

On Error Goto SkipAllThis

Application.ScreenUpdating = False
Application.EnableEvents = False

With Worksheets("Source") 'or whatever sheet has your code and stores your values
  lngLastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
  If .Range("A1").Value <> .Cells(lngLastRow, 2).Value Then
    .Cells(lngLastRow + 1, 2).Value = Range("a1").Value
  End If
End With

SkipAllThis:

Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

答案 1 :(得分:0)

DRS,

将睡眠功能实现为:

Declaring & Calling The Sleep API

然后,抓住你的价值。请注意,API以毫秒为单位。

-G。