结束小组需要错误424对象

很久以前的潜伏者,第一次海报。 这个错误一直困扰着我好几个星期,所以我不得不求助于寻求帮助。

我有一个Excel的补充,我已经开发。 添加有一个自定义的右键单击菜单,取代了标准的Excel右键单击菜单SheetBeforeRightClick。 这工作得很好,当你删除你右键点击的行时会被删除。

例如。 右键单击“主要项目”工作表上的单元格E11以调出菜单。 菜单代码:

Private Sub SheetBeforeRightClick(ByVal sh As Object, ByVal Target As Range, Cancel As Boolean) Dim ClstrCmd As CommandBar 'Display cluster display option commands On Error GoTo connerr If ActiveSheet.Name = "Control" Then Cancel = True Set ClstrCmd = FinanceCreateSubMenuControlNew ClstrCmd.ShowPopup ElseIf ActiveSheet.Name = "Input" Then Cancel = True Set ClstrCmd = FinanceCreateSubMenuInputNew ClstrCmd.ShowPopup ElseIf ActiveSheet.Name = "Major Projects" Or ActiveSheet.Name = "Projects GP Report" Then Cancel = True Set ClstrCmd = FinanceCreateSubMenuProjectsNew ClstrCmd.ShowPopup Else 'No Menu for this sheet End If connerr: End Sub Function FinanceCreateSubMenuProjectsNew() As CommandBar ''Create some objects Dim cb As CommandBar Dim cbc As CommandBarControl ''Ensure our popup menu does not exist FinanceDeleteCommandBar "FINANCE_PROJECTS" ''Add our popup menu to the CommandBars collection Set cb = CommandBars.Add(Name:="FINANCE_PROJECTS", Position:=msoBarPopup, MenuBar:=False, Temporary:=False) Set cbc = cb.Controls.Add With cbc .Caption = "Insert Seperator Row" .OnAction = "InsertMajorProjectsSeperator" End With Set cbc = cb.Controls.Add With cbc .Caption = "Delete Seperator Row" .OnAction = "DeleteMajorProjectsSeperator" End With Set FinanceCreateSubMenuProjectsNew = cb End Function 

从我的自定义菜单中select“删除行”。 这将调用Procedure Deleterow。

 Sub DeleteRow() Deleterow = ActiveCell.Row If ActiveWorkbook.Worksheets("Major Projects").Range("A" & Deleterow) = "x" Then ActiveWorkbook.Worksheets("Major Projects").Rows(Deleterow).EntireRow.Delete Else MsgBox "You haven't selected a seperator to delete" End If End Sub 

这将删除选定的行。 一旦行被删除,代码就会退回到FinanceCreateSubMenuProjectsNew函数。 然后到SheetBeforeRightClick过程完成。 它在SheetBeforeRightClick过程中到达End Sub,并提供了一个424 – Object requred错误。 没有debugging选项,我不能错误的陷阱,因为它看起来后结束小组错误。 我只能假设它,因为你右键点击的单元格已被删除,系统已经失去了目标。 如果我把一个msgbox Target.address我可以导致该行发生错误。 如果我在修复该错误的msgbox之前设置Target = activecell,但在End Sub上仍然存在错误。 是否有我需要重置的系统目标types的variables?

即使放在一个表(“主要项目”)范围(“a1”)。select没有帮助。

由于代码错误,Addin卸载。 那么用户需要重新启动插件,然后才能再次使用任何function。

真正的踢球者是,一旦我重新启动插件,我可以删除行而不会出现错误。 再次得到错误的唯一方法是完全closuresExcel并重新启动。 仅closures文件不会导致错误重新生成。

我尝试了一些简单的东西,它没有编译(一个variables名称与子名称相同)。 可能是你应该定义并使用一个Longtypes的variableslngDeleteRow

 Sub DeleteRow() Dim lngDeleteRow as Long Debug.Print "ActiveWorkbook: " & ActiveCell.Worksheet.Parent.Name Debug.Print "ActiveSheet: " & ActiveCell.Worksheet.Name Debug.Print "ActiveCell: " & ActiveCell.Address If Err.Number <> 0 Then Debug.Print "DeleteRow() : ERR " & Err.Number & " " & Err.Description Err.Clear End If lngDeleteRow = ActiveCell.Row If ActiveWorkbook.Worksheets("Major Projects").Range("A" & lngDeleteRow) = "x" Then ActiveWorkbook.Worksheets("Major Projects").Rows(lngDeleteRow).EntireRow.Delete Else MsgBox "You haven't selected a seperator to delete" End If End Sub 

您可能还想在整个实时代码中放置更多的Debug.Print行来指出错误。 当我有这样的情况时,我会添加Debug.Print Now & vbTab & "Sub/Function name - Start"在每个开始Sub和函数,并在最后一个“完成”,所以我可以更精确地跟踪错误在立即窗口。

答案最终使用Application.OnTime函数来调用删除function。 这允许删除独立于运行的其他代码。