如何在excel中获取实时数据

Posted

技术标签:

【中文标题】如何在excel中获取实时数据【英文标题】:how to capture real time data in excel 【发布时间】:2016-04-18 17:47:34 【问题描述】:

我有一个链接到实时数据 (=Tickers!Z12) 的单元格 (A1)。我想在五分钟内捕获所有价格范围。我的问题是我正在尝试使用 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

【问题讨论】:

this thread 有什么帮助吗?还是this one?你尝试过什么,什么没用/没用? 是什么导致A1中的公式重新计算? 是什么导致单元格Tickets!Z12中的数据刷新?你使用自动刷新选项吗? 我正在使用 dde ​​链接来检索不同工作表(代码)上的实时数据,我只是通过 =Tickers!Z12 链接到它。我不确定如何通过 dde ​​链接处理重新计算。 每秒刷新可能会产生不必要的影响。如果您确实选择了它,请确保您实施 DoEvents 否则 Excel 可能会冻结。由于我们不确切知道您的 dde ​​链接是如何工作的,请尝试检测正确的事件。也许 worksheet_calculate 正如 vacip 所建议的那样。如果找不到事件,您最终将不得不使用 Timer/Sleep 方法。 【参考方案1】:

尝试使用 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

【讨论】:

它没有对实时更改做出反应,也没有捕获 B 列中的所有值。它只是覆盖 B 列中的值,我需要在下一个中捕获更改的值空行。那有意义吗?所以每次值改变时,它都会在 b 列的最后一行输入。 通过将代码修改为此。我已经实现了我想要的捕获顺序,但我仍然无法让它在值发生变化时自动捕获它们。 lngLastRow = Range("B" & rows.Count).End(xlUp).row @drs 奇怪,它确实为我收集了彼此下方的值。 0_o @drs 嗯,您可以尝试在工作表“Tickers”上添加代码并测试事件CalculateChange,以查看在刷新 dde ​​链接时是否有任何触发? 出于好奇,我尝试在 worksheet_change 下运行它,并链接了 A1 单元格 (=E1),因此我可以手动输入和更改 E1 中的值并且它工作正常,但是当我链接到从其 api 源检索数据的单元格 (=abc123|tik!id0?last) 对该单元格的任何更改都没有反应。每次数据从其 api 源更改时,是否有触发事件?【参考方案2】:

DRS,

将睡眠功能实现为:

Declaring & Calling The Sleep API

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

G.

【讨论】:

以上是关于如何在excel中获取实时数据的主要内容,如果未能解决你的问题,请参考以下文章

如何创建与 Redshift 的实时 Excel 连接

如何对大数据量的数据实时抓取

如何获取实时的股票数据

如何实现EXCEL实时提取SQL中表的数据?

如何在颤振中以简单的方式从实时数据库中获取数据?

如何在flutter中从firebase实时数据库中获取数据?