CommandBars(“Row”)。Controls(“Delete”)。OnAction不再工作

早上好,

我有以下代码来自定义Excel中的右键单击菜单。 它存储在“ThisWorkbook”中ArchiveRow子存储在Module1中。 起初它运行良好,然后完全停止工作,并给出了运行时间

错误5:无效的过程调用或参数。

一分钟工作,另一分钟不工作。 任何帮助表示赞赏。

Private Sub Workbook_Open() Application.CommandBars("Row").Reset Application.CommandBars("Column").Reset Application.CommandBars("Cell").Reset With Application.CommandBars("Row") .Controls("Delete").OnAction = "ArchiveRow" .Controls("Cut").Enabled = False .Controls("Hide").Enabled = False .Controls("Unhide").Enabled = False .Controls("Clear Contents").Enabled = False .Controls("Paste").Enabled = False End With With Application.CommandBars("Cell") .Controls("Delete").Enabled = False .Controls("Cut").Enabled = False End With With Application.CommandBars("Column") .Controls("Delete").Enabled = False .Controls("Cut").Enabled = False End With End Sub 

以下子被称为onaction。 我不认为问题在那里。

 Public Sub ArchiveRow() Application.EnableEvents = False Selection.Cut Sheets("DeletedList").Rows("3:3").Insert Shift:=xlDown Selection.Delete Application.EnableEvents = True End Sub 

注释掉以.Controls("Delete")开头的所有代码.Controls("Delete")将会起作用。 似乎任何参考这个button导致错误。

您可以使用ID 293search删除控件

 Application.CommandBars("Row").FindControl(ID:=293) 

即在代码中用.FindControl(ID:=293)replace.Controls("Delete")

这是一个带有用于参考的Office 2000控件ID的列表。 因此,ID至less应与Office 2000到Office 2016兼容。

奇怪button的名称自己改变。 从“删除”到“$删除”到“$删除…”。 所以我只是写了代码来检测引用它之前的button的名称。