我有一张excel表,其中包含指向实时市场数据的dde链接。我用计时器每秒观看一次dde价格。然后在满足某些条件时提交订单。我试着在中间使用DoEvent进行无限循环,然后冻结工作簿。
有没有办法来响应dde更新中的更改?更改事件未检测到它们。它只是检测用户何时进行手动更改。
有人告诉我,如果我有条件格式化,就有办法接收该事件。因此,我可以创建一个单元格公式,以便在满足条件时转为true,然后条件格式化该单元格为某些格式化时为真,然后选择格式更改事件。那可能吗?如果是这样的话。任何建议,将不胜感激。
要澄清:我想在VBA中选择一个提交订单来交易股票的事件。我现在这样做的方式是使用一个计时器,它遍历所有行,在触发列中寻找真正的单元格。一旦找到它就会关闭该行的标志(将真实条件设置为false)并提交订单。
问题在于快速变动股票的一秒钟是永恒的。因此,当触发器列中的单元格变为true时,我需要在VBA中抛出一个事件,这样我就可以立即响应,而不是等待计时器类的第二个时间间隔。
据我所知,您不能使用小于一秒的值来调用计时器。如果我可以使用毫秒,我的问题将得到解决。我只是每10毫秒循环遍历列表。
据我所知,我无法在VBA中创建另一个线程。如果可以的话,我会做一个无限循环,并在每次迭代后让它进入睡眠状态10毫秒左右。
据我所知,我不能直接将dde拉到VBA甚至.net,因为MSDN说不再支持它了。
我希望这澄清一下。所有建议都表示赞赏。
答案 0 :(得分:1)
如果您创建一个以DDE输出单元格为参数的虚拟函数,那么您应该能够响应Worksheet_Calculate
事件?
我猜这可行,但我没有使用DDE的经验:DDE更新甚至可能直接触发Calculate事件。
答案 1 :(得分:0)
为什么不直接将该单元格中的条件格式逻辑重新创建为单独的单元格?
例如,当条件格式化逻辑高于某个数字时,它可能会突出显示一个单元格 - 您可以将该逻辑放在另一个单元格中 - 例如。 = IF(A1→100,TRUE,FALSE)
所以我想我的问题是 - 为什么在你可以自己拿起活动时选择格式转换事件?
编辑您的澄清:
如果你想在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
所以我仍然无法理解你的情况。
答案 2 :(得分:0)
如果您询问是否可以使用条件格式来触发事件,那么可以。我自己并不熟悉DDE模型,然而,混合条件格式以从数据条件触发事件似乎是一个额外的步骤,如Stepan1010所述。
您可能希望在此链接中考虑Excel中的讨论,因为问题在于更改基于单元格值的DDE连接对单元格所做的更改:http://www.mrexcel.com/forum/showthread.php?176508-Comments-VBA-amp-Min-Max
如果适用于您的应用程序,您还可以考虑使用具有循环设置的DoEvent一段时间,具体取决于实际实现宏的时间。这篇SO文章主要关注状态栏,但我认为同样的逻辑适用于事件执行,比如基于循环中的条件:Force a screen update in Excel VBA
希望这对你有帮助=)
〜JOL