如果您对 VBA 解决方案持开放态度,则可以使用该Workbook.SetLinkOnData
方法在传入数据更改时调用 Sub。
我建议只响应TIME
主题的更改,并一次性复制所有相关数据
基于此数据布局
在 Open 事件上设置监视器(将其放在ThisWorkbook
模块中)
Sub Workbook_Open()
Dim wb As Workbook
Dim Links As Variant
Dim i As Long
Set wb = ThisWorkbook
Links = wb.LinkSources(xlOLELinks)
For i = LBound(Links) To UBound(Links)
If Left$(Links(i), 8) = "MT4|TIME" Then
wb.SetLinkOnData Links(i), "MT4_OnUpdate"
End If
Next
End Sub
并在普通模块中编写数据处理程序
Sub MT4_OnUpdate()
' DDE Updated TIME, copy data
Dim ws As Worksheet
Dim Source As Range
Dim Dest As Range
Set ws = Worksheets("Your DDE Data Sheet")
With ws
Set Source = ws.Range("A2:E2")
Set Dest = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, Source.Columns.Count)
End With
Dest.Value = Source.Value
End Sub
这会将单元格复制A2:E2
到历史数据列表的底部,每次A2
(来自 MT4 的时间戳)更改。
注意:您在 OP 中说要每毫秒更新一次。这不可能发生,因为MT4|TIME
返回的 DateTime 序列的分辨率为 1 秒。即使它可能发生,Excel 处理的数据也太多了