【发布时间】:2014-03-31 01:11:18
【问题描述】:
我有一个运行很长时间的 Excel VBA 宏(可能会运行数天,它会执行数据采集)。它最初是为 Excel 2003 编写的,具有自定义工具栏和菜单。 我最近将它更新为使用 RibbonXML 的功能区界面。
在宏运行时,我想禁用一些界面元素(例如“开始测试”),并启用其他元素(例如“停止测试”按钮。)
我遇到的问题是,对ribbon.invalidate 的调用仅在宏代码运行完成之后处理。
您可以通过一个简单的测试程序很容易地看到这种效果
Sub test()
ribbon.Invalidate
DoEvents
Sleep (5000)
End Sub
功能区“getEnabled”回调中的 debug.print 仅在 5 秒睡眠结束时才会被执行。
有什么方法可以强制一个ribbon.Invalidate 在那里激活吗?
:: 编辑 1 ::
我创建了一个小型演示工作簿来说明问题: http://www.bodgesoc.org/Button_Demo.xlsm
:: 编辑 2::
另一个论坛的成员找到了一个解决方案,尽管它有点难看。 我想这现在可以标记为“已回答”,但更优雅的解决方案将不胜感激。
Application.ScreenUpdating = False
Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"",False)"
Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"",True)"
Application.ScreenUpdating = True
【问题讨论】: