1

我有以下 VBA 代码块,它应该为我的默认文件夹中的每个联系人创建一个带有名字的弹出框。

Sub DeleteaContact()
   Dim myOutlook As Outlook.Application
   Dim myInformation As NameSpace
   Dim myContacts As Items
   Dim myItems As ContactItem

   Set myOutlook = CreateObject("Outlook.Application")
   Set myInformation = myOutlook.GetNamespace("MAPI")
   Set myContacts = myInformation.GetDefaultFolder(olFolderContacts).Items

    For Each myItems In myContacts
      MsgBox (myItems.FirstName)
    Next

End Sub

出于某种原因,我在循环结束时收到零星的类型不匹配错误。

任何人都可以解释这个问题的原因吗?

4

2 回答 2

1

文件夹可以存储的不仅仅是您期望的数据类型。将 myItems 更改为

Dim myItems As Object

并将消息框更改为

Debug.Print TypeName(myItems)

然后检查即时窗口 (Ctl+G) 以查看是否有任何项目不是 ContactItem。如果你确定你有一些不是联系人的东西,你只需要测试它。将 myItems 保留为对象,但使用类似的代码

If TypeName(myItems) = "ContactItem" Then
    MsgBox myItems.FirstName
End If

通常,我在编写代码时将变量类型化为特定项目(例如 ContactItem),然后在完成后将它们全部转换为 Object。这样,您就可以在编码时获得 Intellisense 的好处。

于 2011-06-09T22:16:59.113 回答
0

尝试改变:

MsgBox (myItems.FirstName)

至:

MsgBox myItems.FirstName

因为 VBA 不喜欢不必要的括号

于 2011-06-09T21:58:53.987 回答