2016-06-07 57 views
0

对于每个Outlook联系人,我需要获取每个字段的名称和值。例如:
例如。如何使用VBA打印每个Outlook联系人字段的名称和值

FirstName: John 
    LastNmae: Doe 
... etc. 

我该如何解决这个问题,而无需单独引用每个字段?

使用下面的代码我可以打印每个属性的名称,但我不知道如何打印该值。被注释掉的行抛出一个错误:“无效的过程调用或参数”

Dim ContactsFolder As Folder 
Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts) 
Dim Contact As ContactItem 
Dim i As Integer 

    For Each Contact In ContactsFolder.Items 
     id = Contact.EntryID 
     Debug.Print Contact.FirstName 
     Debug.Print id 
     For i = 0 To Contact.ItemProperties.Count - 1 
      Debug.Print Contact.ItemProperties(i).Name 
      'Debug.Print Contact.ItemProperties(i).Value 
     Next 
    Next 
+0

*您是否尝试*迭代联系人? “没有单独引用每个字段”是什么意思? –

+0

在这方面,outlook的应用程序树存在一个大问题...您可以拥有多个带有多个地址列表和多个地址列表的多个收件箱的Outlook会话。 。 。使用foreach来查看olOutlookContactAddressEntry ...但即使如此---你需要所有的字段?我对此表示怀疑。 –

+0

为什么你需要**所有*属性?如果你的代码不知道它,它会有什么好处呢? –

回答

0

这里是抓住所有地址列表的所有名称在当前会话中的一个例子。

您可以在https://msdn.microsoft.com/en-us/library/office/dn320232.aspx

找到对象的所有属性为获得对象的属性的名称并进行评价,看到一个类型库引用。 (http://visualbasic.happycodings.com/applications-vba/code19.html可能适用,也可能不适用)

Sub getContact() 

    Dim ContactsFolder As Folder 
    Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts) 
    Dim Contact As ContactItem 
    Dim i As Integer 

    For Each Contact In ContactsFolder.Items 
     ID = Contact.EntryID 
     Debug.Print Contact.FirstName 
     Debug.Print ID 
     For i = 0 To Contact.ItemProperties.Count - 1 
     Debug.Print Contact.ItemProperties(i).Name 
     ' Doesn't work for object propertieties, like application. 
     ' (Do Error Handling) 
     Deubg.Print CallByName(Contact, Contact.ItemProperties(i).Name, VbGet) 
    Next 
Next 


End Sub 
+0

OP询问如何打印每个可用属性的名称,而不是每个地址条目。 –

+0

@DmitryStreblechenko我提供了关于TypeLib的链接,但我相信最好只查找对象的属性并选择你需要的属性。 –

+0

@科迪G。我只对用户的本地联系人文件夹感兴趣,而不是整个AddressList。我试图弄清楚如何将TypeLib并入上面的代码中,但目前还没有运气。 – SeanS