我简单的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代码。
- 在VBA的Windows 7和更早版本的任务栏上更改Microsoft Excel的图标
- 在Excel中查看多个列上的多个值
- RJava Apache POI Excel(XSSF)删除图片
- 无法将“microsoft.Office.Interop.Excel.ApplicationClass”types的COM对象转换为“microsoft.Office.Interop.Excel.Application”
- 如何提高Excel数据连接的刷新?
- 在Excel中编写一个Web应用程序? 为什么不?
- 当用户确认模型信息时,如何回发我的模型?
- 我无法input存储在android studio资产文件夹中的excel文件中的数据
- excel vba减慢excel下降,造成10秒钟的蛋计时器延迟点击纸张上的任何地方