小编bod*_*soc的帖子

代码运行时未调用Excel VBA功能区getEnabled

我有一个运行很长时间的Excel VBA宏(可能持续数天,它执行数据采集).它最初是为Excel 2003编写的,具有自定义工具栏和菜单.我最近更新了它以使用RibbonXML使用功能区界面.

当宏运行时,我想禁用一些界面元素(例如"开始测试"),并启用其他元素(例如"停止测试"按钮.)

我遇到的问题是只有宏代码运行完成才会调用ribbon.invalidate .

使用简单的测试程序,您可以非常轻松地看到这种效果

Sub test()

ribbon.Invalidate
DoEvents
Sleep (5000)

End Sub
Run Code Online (Sandbox Code Playgroud)

功能区"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
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba ribbonx

5
推荐指数
1
解决办法
1492
查看次数

标签 统计

excel ×1

excel-vba ×1

ribbonx ×1

vba ×1