我正在尝试在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
答案 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