Долгое время lurker, впервые плакат. Эта ошибка прослушивала меня в течение нескольких недель, поэтому мне пришлось обратиться за помощью.Ошибка 424 Требуется объект на конце Sub
У меня есть отличное дополнение, которое я разработал. В добавлении есть пользовательское меню щелчка правой кнопкой мыши, которое заменяет стандартное меню правого щелчка excel, ограничивающее значение SheetBeforeRightClick. Это работает отлично, execpt, когда вы удаляете строку, на которую вы щелкнули правой кнопкой мыши.
Например. Вы щелкаете правой кнопкой мыши по ячейке 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
Вы выбираете опцию «Удалить строку» из моего пользовательского меню. Это вызывает процедуру 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. Он получает End End в процедуре SheetBeforeRightClick и дает ошибку 424 - Object Required. Отладочной опции нет, и я не могу ее уловить, поскольку она появляется после ошибки после End Sub. Я могу только предположить его, потому что ячейка, которую вы щелкнули правой кнопкой мыши, была удалена, и система потеряла цель. Если я положил msgbox Target.address Я могу вызвать ошибку в этой строке. Если I установить Target = activecell перед протоколом msgbox, который исправляет эту ошибку, но все еще ошибки в End Sub. Есть ли системный целевой тип переменной, которую мне нужно сбросить?
Даже вставка в лист («Основные проекты»). Диапазон («a1»). Выбрать не помогает.
Исчерпайте ошибки кода, Addin выгружает. Таким образом, пользователю необходимо перезапустить добавление, прежде чем они смогут снова использовать любую функциональность.
Настоящий кикер, как только я перезапустил аддон, я могу удалить строки, не получив ошибку. Единственный способ получить ошибку снова - полностью закрыть Excel и начать заново. Закрытие файла не приводит к повторной ошибке ошибки.
Если вы намерены полностью заменить меню правой кнопкой мыши, попробуйте помещать 'Cancel = True' в нижней части вашего мероприятия, чтобы он всегда был отменен. Я не смотрел подробно (уже поздно), но я бы поставил под угрозу, что ваше мероприятие вызывается дважды подряд. –
Также отключите обработку ошибок - вам нужно увидеть ошибки. В любом случае, это идея v.bad иметь обработчик, который не обрабатывает ошибку. –
Спасибо за ответы. Я правильно обрабатываю ошибки в своем живом коде, но просто раздели его для этого сайта (или это будет 1000 строк длиной).Отключение обработки ошибок ничего не делает, поскольку ошибка возникает (после?) End Sub. Таким образом, весь код будет завершен к тому времени. Свойство Like excel имеет переменную SystemTarget, которая настроена на ячейку, на которую вы нажали. Если вы удалите ячейку, она потеряет значение и ошибки. Но после этого прекрасно работает. Его Bizzare один. Я добавил дополнительный cancel = true. Но это не остановило ошибку. – Milesy