【问题标题】:How to access a user defined field/column in Outlook VBA如何在 Outlook VBA 中访问用户定义的字段/列
【发布时间】:2022-11-02 06:17:54
【问题描述】:

我正在 Outlook VBA 中创建一个宏,旨在将联系人从我的默认联系人文件夹复制到另一个联系人文件夹,以用户定义字段的值为条件。当引用内置字段的值时,代码会按需要工作。但是,在尝试引用用户定义字段的值时会出现问题。我的代码似乎无法到达现场。

在这里,当引用联系人的标题时(“标题”是一个内置字段),VBA 立即找到它,没有问题。

Sub copyitem() ' Copy and move all contacts from default folder "Contacts" to "Contacts.1.01

Dim olookitem As Object
Dim olookname As NameSpace
Dim olookfldr As folder
Dim destfolder As folder
Dim olookcontactitem As ContactItem
Dim mycopieditem As ContactItem


Set olookname = Application.GetNamespace("MAPI")
Set olookfldr = olookname.GetDefaultFolder(olFolderContacts)
Set destfolder = olookfldr.Folders("Contacts.1.01")


For Each olookitem In olookfldr.items
    
    If olookitem.Class = olContact And olookitem.Title = "Mr." Then
        
        Set olookcontactitem = olookitem
        
                Set mycopieditem = olookitem.Copy
        
        mycopieditem.Move destfolder
        
        
    End If
Next
End Sub

但是,当尝试引用在用户定义字段中定义的联系人属于我办公室的哪个团队(名为“团队”的列)时,我的宏无法识别它。代码如下。

Sub copyitem() ' Copy and move all contacts from default folder "Contacts" to "Contacts.1.01

Dim olookitem As Object
Dim olookname As NameSpace
Dim olookfldr As folder
Dim destfolder As folder
Dim olookcontactitem As ContactItem
Dim mycopieditem As ContactItem
Dim Myproperty As Object


Set olookname = Application.GetNamespace("MAPI")
Set olookfldr = olookname.GetDefaultFolder(olFolderContacts)
Set destfolder = olookfldr.Folders("Contacts.1.01")
Set Myproperty = olookfldr.UserDefinedProperties.Find("Team")

Set MyP = olookfldr.UserDefinedProperties

' MsgBox (MyP.item(1).Name)
For Each olookitem In olookfldr.items
    
    If olookitem.Class = olContact And MyP.item(9).Name = "Accounting" Then
           
            
        Set olookcontactitem = olookitem
        
                Set mycopieditem = olookitem.Copy
        
        mycopieditem.Move destfolder
        
        
    End If
Next
End Sub

【问题讨论】:

  • 为什么每次循环都需要检查文件夹的属性?

标签: vba outlook ms-office


【解决方案1】:

可以使用ContactItem.PropertyAccessor.GetProperty 检索用户定义的(和所有其他)属性。该方法以 DASL 属性名称为参数;要查看属性及其 DASL 名称,请查看使用 OutlookSpy(我是其作者)设置该属性的项目 - 单击 IMessage 按钮,选择属性,查看其 DASL 名称。

您还可以使用ContactItem.UserProperties.Item("PropertyName") 检索用户属性,但必须将自定义属性添加为用户属性,而ContactItem.PropertyAccessor.GetProperty 可以检索任何可用属性。

【讨论】:

  • 谢谢德米特里。您能否给出 propertyaccessor 方法的快速示例代码?
【解决方案2】:

您需要从联系人项目中获取用户定义字段的属性值,而不是文件夹:

Dim userProps as Outlook.UserProperties
Dim userProp as Outlook.UserProperty
For Each olookitem In olookfldr.items
    If olookitem.Class = olContact The  
        Set olookcontactitem = olookitem
        Set userProps = olookcontactitem.UserProperties
        Set userProp = userProps.Find("Team")
        Dim value as String = userProp.Value
        If value = "Accounting" Then
          Set mycopieditem = olookitem.Copy
          mycopieditem.Move destfolder
        End If
    End If
Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多