0

我想屏蔽一些命令栏选项,但我目前使用的方法有点过于严格。我目前使用此代码:

Sub Auto_Open()
Application.CommandBars.FindControl(ID:=847).Enabled = False
End Sub

Sub Auto_Close()
Application.CommandBars.FindControl(ID:=847).Enabled = True
End Sub

这样做的问题是,只要具有此代码的工作簿保持打开状态,就没有其他工作簿可以使用无效控件。我认为一个解决方案可能是使用:

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range,  Cancel As Boolean)
Application.CommandBars.FindControl(ID:=847).Enabled = False
End Sub

这将阻止用户在右键单击时使用我的无效控件,例如删除工作表。

我现在需要一种方法来在它们单击离开时立即删除这些空白,以便这些控件可用于它们可能打开的任何其他工作簿。是否有一个我可以使用的事件,它并不常见,它会使代码每 10 秒运行一次?我还想知道您是否可以使用 vba 中的延迟在前一段代码之后 5 秒运行一段代码?

4

1 回答 1

0

在要禁用命令栏选项的工作簿模块中,输入:

Private Sub Workbook_Activate()
    Application.CommandBars.FindControl(ID:=847).Enabled = False
End Sub

Private Sub Workbook_Deactivate()
    Application.CommandBars.FindControl(ID:=847).Enabled = True
End Sub

每当您在工作簿中工作时,都应禁用这些命令。我不确定它是否会在 Excel 2007 中工作,因为Application.CommandBars.FindControl(ID:=847).Caption&Delete单元格右键单击和选项卡右键单击上仍然启用删除。

在 Excel 2007 中,您可以禁用活动工作簿的功能区命令,但这并不容易。您必须更改工作簿扩展名,.zip然后编辑zip.rels文件夹中的文件。_rels将扩展名更改回编辑后的内容,并且应禁用目标命令或组。禁用功能区命令也会禁用任何关联的右键单击命令。令人惊讶的是,功能区中没有工作表添加/删除命令。

于 2014-07-04T11:29:50.150 回答