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 

任何想法,为什么对象的列表不存在?

在使用Bryan关于它作为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 

简答 由于用户没有执行任何在“撤消”队列中保存的操作, .List还没有出现。 代码试图访问尚未创build的东西。 我不得不为它创build一个error handling程序。

长答案:在我的search中,我发现VBA中的Controls对象没有正式的List属性。 但是, Controls("&Undo")不是一个控件对象。 这是一个CommandBarComboBox

所以在

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

Controls(“&Undo”)的.List属性实际上并不显示在Excel VBA智能感知中。 它正在查看控件对象的智能感知下拉列表。 但是,如果你尝试

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

在即时窗口中,您将看到它具有CommandBarComboBoxtypes,它具有list属性。 但是,像其他ComboBox样式控件一样,在添加列表成员之前,不会创build列表。 在这种情况下,当用户执行值得存储在撤销队列中的动作时。