我简单的MsgBox VBA停止整个电子表格,除非我点击“确定”?

请耐心等待,因为我尽可能简洁地描述为poss:

我有一个基本的交易电子表格,如果价格超过我的目标价格,一个单元格AB4显示文字“买入”。 如果我拥有这只股票,并且价格低于我的目标,那么同一个单元显示“卖出”。 无论哪种方式,电子表格也会自动发出订单来执行交易。

所有我想要的是一个msgbox提醒我每当信号出现时记笔记。 我只需要一个提醒,但我确实需要它,因为我总是忘记。

在阅读了很多过去的post之后,这是我第一次尝试:

Private Sub worksheet_calculate() If Range("AB4").value = "BUY" Or Range("AB4").value = "SELL" Then MsgBox ("Record Catalyst") End If End Sub 

似乎工作,但只要我点击“确定”msgbox会立即重新出现。 只要“买”或“出售”文本显示msgbox不会消失,无论我点击它的次数。

所以我再次search,并find一种方法,使msgbox只出现一次:

 Private Sub worksheet_calculate() If ActiveSheet.Range("BV4").Text = "Triggered" Then Exit Sub If Range("AB4").value = "BUY" Or Range("AB4").value = "SELL" Then MsgBox ("Record Catalyst") ActiveSheet.Range("BV4") = "Triggered" End If End Sub 

似乎工作魅力除非如果我不点击“确定”使msgbox消失我的整个电子表格停止做任何事情(即价格不再更新,计算不再执行等)! 它似乎等着我先点击爆炸的“OK”。 这是一个主要的问题,因为如果我不在周围,当一个msgbox出现,电子表格停止,那么如果我的投资组合中的另一个股票的价格达到了目标,电子表格甚至不会知道,更不用说自动发出订单了。

为什么这个简单的程序停止电子表格的运作,我怎样才能解决我原来的“简单”msgbox问题? 我不想在电子表格上使用条件格式化路由,因为它已经有太多有条件格式化的单元格了。

谢谢大师!

似乎主要的问题是MsgBox不会超时消失,因为消息只是提供信息。

在Promped消息下面的代码将在2秒内超时并允许该子结束。

 Private Sub worksheet_calculate() If ActiveSheet.Range("BV4").Text = "Triggered" Then Exit Sub If Range("AB4").Value = "BUY" Or Range("AB4").Value = "SELL" Then Set objShell = CreateObject("Wscript.Shell") intReturn = objShell.Popup("Record Catalyst", _ 2, , wshOk) If intReturn = 1 Then 'do something if you click ok ElseIf intReturn = -1 Then 'do something if times out alone, like record in a diff sheet End If ActiveSheet.Range("BV4") = "Triggered" Set objShell = Nothing End If End Sub 

希望这可以解决你的问题。

如果Windows messenger服务正在运行(在我试过的每台机器上都默认是这样的),那么可以使用Shell函数来自己Msg 。 这与@ Miguel_Ryu的方法类似,只是Shell将asynchronous运行 – 它是完全非阻塞的。 下面的例子演示了(显然你会想用你的Windows用户名replace'Comintern'):

 Sub NonBlockingMessage() Dim i As Integer Shell "msg Comintern Look at me, I'm non-blocking!", vbHide For i = 1 To 10000 Debug.Print i Next i End Sub 

您将看到popup消息,然后在执行循环时看到数字滚动。 这也有消息不限于你的代码的运行时间的优势。 它会一直呆在那里,直到被解雇,无论你的代码是否完成,除非你用/time:参数给它一个timout。

更好的是,信息会堆积起来。 如果你运行了两次以上的testing代码而没有驳回第一条消息,你仍然可以得到这两个testing代码。