CommandBars(" Row")。控件("删除")。OnAction不再工作了

时间:2016-11-24 09:25:22

标签: excel vba excel-vba

早上好,

我有以下代码来自定义excel中的右键单击菜单。 它存储在" ThisWorkbook" 中。 ArchiveRow sub存储在 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")开头的所有代码都可行。 似乎对此按钮的任何引用都会导致错误。

2 个答案:

答案 0 :(得分:1)

您可以使用ID 293

搜索删除控件
Application.CommandBars("Row").FindControl(ID:=293)

即。在代码中将.Controls("Delete")替换为.FindControl(ID:=293)

Here是一个包含Office 2000控件ID的列表,供参考。因此,ID应至少与Office 2000到Office 2016兼容。

答案 1 :(得分:0)

奇怪按钮的名称会自行更改。从“删除”到“$删除”到“$删除...”。所以我只是编写代码来检测按钮的名称,然后再引用它。