3

我有一个 Excel 表,其中包含指向实时市场数据的 dde ​​链接。我使用计时器每秒查看 dde ​​价格。然后在满足某些条件时提交订单。我尝试了一个中间带有 DoEvent 的无限循环,它工作了 5 秒,然后冻结了工作簿。

有没有办法响应 dde ​​更新的变化?更改事件不会检测到它们。它只是检测用户何时进行手动更改。

有人告诉我,如果我有条件格式,就有办法获取该事件。因此,我可以创建一个单元格公式以在满足我的条件时变为真,然后在条件为真时将该单元格格式化为某种格式,然后选择格式更改事件。那可能吗?如果有怎么办。任何建议,将不胜感激。

澄清:我想在 VBA 中选择一个事件,该事件将提交交易股票的订单。我现在这样做的方式是使用一个计时器,该计时器循环遍历所有行,以在触发器列中寻找真正的单元格。一旦找到它就会关闭该行的标志(将 true 条件设置为 false)并提交订单。

问题在于,对于快速移动的股票来说,一秒钟是永恒的。因此,当触发器列中的单元格变为真时,我需要在 VBA 中引发一个事件,这样我就可以立即响应,而不是等待计时器类的第二个间隔。

据我所知,您不能调用值小于一秒的计时器。如果我可以使用毫秒,我的问题就会得到解决。我只是每 10 毫秒循环一次列表。

据我所知,我无法在 VBA 中创建另一个线程。如果可以的话,我会做一个无限循环,并在每次迭代后让它休眠 10 毫秒左右。

据我所知,我无法将 dde ​​直接拉入 VBA 甚至 .net,因为 MSDN 表示不再支持它。

我希望这可以澄清。所有建议表示赞赏。

4

3 回答 3

1

如果您创建一个将 DDE 输出单元格作为参数的虚拟函数,那么您应该能够响应该Worksheet_Calculate事件吗?

我猜这可能有效,但我没有使用 DDE 的经验:DDE 更新甚至可能直接触发 Calculate 事件。

于 2012-07-26T07:05:00.370 回答
0

你为什么不把你在那个单元格中的任何条件格式逻辑重新创建到一个单独的单元格中呢?

例如,您的条件格式逻辑可能会在某个单元格高于某个数字时突出显示它 - 您可以将该逻辑放在另一个单元格中 - 例如。=if(A1>100,真,假)

所以我想我的问题是 - 当您可以选择事件本身时,为什么还要选择格式更改事件?

编辑您的澄清:

如果您想在 VBA 中连续运行宏,则不需要计时器 - 您可以像这样执行连续循环:

Sub macro1()

    Dim i As Double

    With Sheet1

        Do

            '.Cells(5, 4).Value = i

            i = i + 1

            .Cells(1, 1).Value = i

            ' you are going to want to comment this out if you want to don't need to do other things
            DoEvents

            If Sheets("Sheet1").Range("A2").Value = True Then
                ' put your code here.
            End If
        Loop

    End With
End Sub

所以我一定仍然无法理解你的情况。

于 2012-07-25T19:32:20.183 回答
0

如果您询问是否可以使用条件格式来触发事件,是的,这是可能的。然而,我自己并不熟悉 DDE 模型,正如 Stepan1010 所指出的,混合条件格式以触发数据条件中的事件似乎确实是一个额外的步骤。

您可能需要考虑此链接中 Excel 先生中的讨论,因为问题集中在更改基于单元格值的 DDE 连接中对单元格所做的更改:http ://www.mrexcel.com/forum/showthread.php?176508 -评论-VBA-amp-Min-Max

如果适用于您的应用程序,您还可以考虑使用 DoEvent 并根据您实际实现宏的时间段设置循环。这篇 SO 文章专注于状态栏,但我认为同样的逻辑适用于事件执行,比如基于循环内的条件:Force a screen update in Excel VBA

希望这对你有帮助 =)

~乔尔

于 2012-07-25T20:09:34.483 回答