Vba 错误424末端接头上需要对象
长期潜伏者,第一次海报。这个错误困扰了我好几个星期,所以我不得不求助于寻求帮助 我已经开发了一个excel外接程序。外接程序有一个自定义的右键单击菜单,它取代了标准的excel右键单击菜单在右键单击之前取消工作表。这非常好,删除右键单击的行时执行 比如说。右键单击“主要项目”表上的单元格E11以打开菜单。 菜单代码:Vba 错误424末端接头上需要对象,vba,excel,Vba,Excel,长期潜伏者,第一次海报。这个错误困扰了我好几个星期,所以我不得不求助于寻求帮助 我已经开发了一个excel外接程序。外接程序有一个自定义的右键单击菜单,它取代了标准的excel右键单击菜单在右键单击之前取消工作表。这非常好,删除右键单击的行时执行 比如说。右键单击“主要项目”表上的单元格E11以打开菜单。 菜单代码: Private Sub SheetBeforeRightClick(ByVal sh As Object, ByVal Target As Range, Cancel As Boo
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
您可以从我的自定义菜单中选择“删除行”。这将调用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
这将删除选定的行。删除行后,代码将返回FinanceCreateSubleNumProjectsNew函数。然后在工作表上单击鼠标右键完成之前的步骤。它到达SheetBeforeRightClick过程的End Sub,并给出一个424对象请求错误。没有调试选项,并且我不能错误捕获它,因为它在结束子节点之后出现错误。我只能假设它是错误的,因为您右键单击的单元格已被删除,并且系统已丢失目标。如果我加入
msgbox Target.address
我可以导致该行发生错误。如果我
设置目标=activecell
在修复该错误的msgbox之前,但在End Sub上仍然存在错误。是否需要重置系统目标类型的变量
甚至还放了一个
表格(“主要项目”)。范围(“a1”)。选择
没用
由于代码错误,加载项将卸载。因此,用户需要重新启动加载项,然后才能再次使用任何功能
真正重要的是,一旦我重新启动了加载项,我就可以删除行而不会出现错误。再次出现错误的唯一方法是完全关闭Excel并重新启动。仅关闭文件不会导致错误再次发生。我尝试了一些简单的方法,但没有编译(变量名与子名称相同)。可能您应该定义并使用长类型变量
lngDeleteRow
:
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
子删除行()
暗淡的lngDeleteRow与长
调试。打印“ActiveWorkbook:”&ActiveCell.Worksheet.Parent.Name
调试。打印“ActiveSheet:&ActiveCell.Worksheet.Name”
调试。打印“ActiveCell:”&ActiveCell.Address
如果错误号为0,则
Debug.Print“DeleteRow():ERR”&ERR.Number&“”&ERR.Description
呃,明白了
如果结束
lngDeleteRow=ActiveCell.Row
如果ActiveWorkbook.Worksheets(“主要项目”).Range(“A”和lngDeleteRow)=“x”,则
ActiveWorkbook.Worksheets(“主要项目”).Rows(lngDeleteRow).EntireRow.Delete
其他的
MsgBox“您尚未选择要删除的分隔符”
如果结束
端接头
您可能还需要在整个实时代码中添加更多的Debug.Print行以锁定错误。当我遇到这样的情况时,我会在每个开始的子函数和函数中添加
Debug.Print Now&vbTab&“Sub/Function name-Start”
,并在末尾添加一个“Finish”,这样我就可以在即时窗口中更准确地跟踪错误。答案是使用Application.OnTime函数调用delete函数。这允许删除与运行的其余代码分开进行。如果您打算完全替换右键菜单,请尝试将Cancel=True
放在事件底部,以便始终取消。我还没有详细查看(已经很晚了),但我可以冒昧地猜测,您的事件正在连续调用两次。另外,请禁用您的错误处理-您需要查看错误。无论如何,拥有一个不处理错误的处理程序是个坏主意。感谢您的回复。我确实正确地处理了我的实时代码中的错误,但只是在这个站点上删除了它(否则会有1000行)。当错误发生在终端子节点上(之后?)时,禁用错误处理将不会产生任何效果。因此,所有代码都将在那时完成。它类似于excel有一个SystemTarget变量,该变量设置为您单击的单元格。如果删除单元格,则会丢失值和错误。但在那之后效果很好。这是一个奇怪的问题。我添加了额外的cancel=true。但这并没有阻止错误。谢谢你的回复。这是一个很好的选择,但它并没有解决故障。即使我只是说ActiveWorkbook.Worksheets(“主要项目”).Range(A1:R500).EntireRow.Delete以在重新运行查询之前清除现有数据,而这恰好是我单击以启动菜单的范围,它也会出错。