右键单击后运行的代码

时间:2014-07-04 07:36:14

标签: excel vba excel-vba delay commandbar

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

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秒运行一段代码?

1 个答案:

答案 0 :(得分: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文件。将扩展名更改回编辑后的状态,应禁用目标命令或组。禁用功能区命令还会禁用任何关联的右键单击命令。踢球者是功能区中无法使用工作表添加/删除命令。