在关闭VBA Excel之前,不会在工作簿上重置命令栏(“Ply”)

在关闭VBA Excel之前,不会在工作簿上重置命令栏(“Ply”),vba,excel,commandbar,Vba,Excel,Commandbar,我使用以下代码阻止用户右键单击Excel工作簿中的选项卡: application.CommandBars("Ply").Enabled = false 在工作簿的beforeclose事件中,我调用另一个包含 application.CommandBars("Ply").Enabled = true 通过逐步调试,我了解到该命令实际上会重新激活活动工作簿的右键单击,但不会激活其他工作簿/或应用程序的右键单击。关闭后,如果打开另一个完全没有保护的工作簿,则不会启用右键单击选项卡 有人知道如何

我使用以下代码阻止用户右键单击Excel工作簿中的选项卡:

application.CommandBars("Ply").Enabled = false
在工作簿的beforeclose事件中,我调用另一个包含

application.CommandBars("Ply").Enabled = true
通过逐步调试,我了解到该命令实际上会重新激活活动工作簿的右键单击,但不会激活其他工作簿/或应用程序的右键单击。关闭后,如果打开另一个完全没有保护的工作簿,则不会启用右键单击选项卡


有人知道如何为所有工作簿重新激活此右键单击吗?

您可以尝试使用以下命令重置命令栏-

Application.CommandBars("Ply").Reset
因此,就好像我理解您试图对某个工作簿禁用右键单击,因此您应该在该工作簿中使用-

Application.ActiveWorkbook.CommandBars("Ply").Enabled = False

如果目标是防止用户意外或以其他方式单击选项卡,那么最好的解决方案就是将它们隐藏起来。这可以直接完成,也可以通过VBA使用

Dim ws As Worksheet
Set ws = ActiveSheet ' Or whatever sheet you want
ws.Visible = false   ' and as needed during the execution, you may turn this to true

什么版本的Excel?当我测试这一点时,它似乎像预期的那样工作。这是一个应用程序级设置,将其应用于任何工作簿都会影响所有工作簿。因此,当您在BeforeClose事件中重新启用它时,会将右键单击功能恢复到其他工作簿-至少在我在Excel 2010中测试时是这样。好吧,我有Excel 2013。我知道它应该重新激活它。。。到目前为止,我似乎找不到解决方案。hmmm,不幸的是,在工作簿关闭并且Application.ActiveWorkbook.CommandBarsPly.Enabled=False触发错误后,重置也不起作用,似乎我有一种解决方案:如果我将Application.CommandBarsPly.enabled=true与Application.CommandBarsPly.Reset结合使用,它就会工作。除非我在第一个工作簿受保护时打开另一个工作簿,但这是另一天的问题。谢谢这是一个复杂的工作簿,提供不同的界面配置。其中之一允许用户通过左键单击选项卡在选项卡之间导航,而不允许右键单击。因此,我们的想法仍然是隐藏ply命令栏并将其放回原处。我相信这种预设行为背后有一定的原因。祝你好运