VBA - Метод «Список» объекта «_CommandBarComboBox» не выполнен

У меня есть подпрограмма в VBA, которая вызывает другую подпрограмму для выполнения некоторого анализа данных, если пользователь вставляет их. Код ниже приводит к ошибкам:

Ошибка выполнения "-2147467259 (80004005)": сбой метода "Список" объекта "_CommandBarComboBox"

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim UndoList As String
    UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1)  'Errors Here!

    If Left(UndoList, 5) = "Paste" Then
        Dim Annotations() As String
        FindAnnots
    End If

End Sub

Есть идеи, почему список объектов не существует?


person Bryan Harper    schedule 18.04.2016    source источник
comment
это работает на моем конце   -  person Karthick Gunasekaran    schedule 18.04.2016
comment
Спасибо Картик. Как я сказал ниже в своем ответе, свойство .List элемента управления (& Undo) зависит от действий, хранящихся в списке отмены. Если вы не сделали ничего достойного того, чтобы храниться там, то это не сработает.   -  person Bryan Harper    schedule 19.04.2016


Ответы (2)


После использования ответа Брайана о том, что это CommandBarComboBox, я думаю, вы можете проверить его включенный статус, чтобы увидеть, существует ли список. Это единственный способ заставить его работать без использования Возобновить при ошибке.

Используйте следующий цикл, чтобы зафиксировать состояние ComboBox

Dim UndoList As String

If Application.CommandBars("Standard").Controls("&Undo").Enabled = True Then

    UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1)

    If Left(UndoList, 5) = "Paste" Then

        'Code to run here after paste action'

    End If

End If
person TheBoixy88    schedule 22.04.2016

Краткий ответ: списка .List еще нет, потому что пользователь не выполнил никаких действий, которые сохраняются в очереди отмены. Код пытается получить доступ к чему-то, что еще не создано. Мне пришлось создать для него обработчик ошибок.

Подробный ответ. В ходе поиска я обнаружил, что объект Controls в VBA официально не имеет свойства List. Однако Controls("&Undo") не является объектом Controls. Это CommandBarComboBox.

So in

Application.CommandBars("Standard").Controls("&Undo").List(1)

Свойство .List Controls("&Undo") на самом деле не отображается в Intellisense Excel VBA. Он просматривает объект Controls для раскрывающегося списка intellisense. Однако, если вы попробуете

? TypeName(Application.CommandBars("Standard").Controls("&Undo"))

В ближайшем окне вы увидите, что он имеет тип CommandBarComboBox, у которого есть свойство списка. Однако, как и другие элементы управления в стиле ComboBox, список не создается до тех пор, пока не будет добавлен член списка. В этом случае, когда пользователь выполняет действие, достойное сохранения в очереди отмены.

person Bryan Harper    schedule 18.04.2016