找不到方法或数据成员错误

时间:2015-07-07 09:58:24

标签: vba combobox outlook outlook-vba

我正在尝试在Outlook Macro上过滤我的组合框。但我收到标题上提到的错误。你能帮我解决这个问题吗? 它适用于Visual Studio,但不适用于Outlook宏。

Private Sub cmbProjects_Change()
    Dim SelectedText As String
    SelectedText = cmbProjects.text

    Dim Items As Object
    Items = CreateObject("System.Collections.ArrayList")

    Items = cmbProjects.Items

    Dim newList As Object
    newList = CreateObject("System.Collections.ArrayList")
    For Each Item In Items
        If Item.Contains(SelectedText) Then
            newList.Add (Item)
        End If
    Next

    cmbProjects.DataSource = newList
End Sub

1 个答案:

答案 0 :(得分:0)

您需要添加set,因为它是对象引用。并且您正在尝试使用其成员方法/属性访问此对象(您假设为ArrayList)。哪个失败了。所以改为,

Set Items = CreateObject("System.Collections.ArrayList")

Set newList = CreateObject("System.Collections.ArrayList")

进一步检查您的VBA编辑器中是否为集合库对象添加了正确的引用。

CreateObject("System.Collections.ArrayList")

根据我的评论,Items = cmbProjects.Items也会因同样的错误而失败。 That's because cmbProjects doesn't have a method called Items. So you need to use List instead.。 List返回一个变体对象。

因为您无法将变体强制转换为ArrayList。您必须遍历变量并将项添加到ArrayList中。注意我正在动态编写,代码未经过测试。如果您需要进一步的帮助,您可以测试一下并发表评论。 我强烈建议您根据准确的语法验证此伪代码。

Dim vr as Variant
Dim i as Integer

vr = cmbProject.List

'--add error handling to check if vr is empty or if cmbProject is empty.
For i = 0 to UpperBound(vr)

   Items.Add (vr(i))
Next i