我有一个通过其他程序更新的Outlook中的联系人列表。我自己不碰这份清单。每次更改联系人时,我都想通过VBA更新公司名称。
Public WithEvents objNewContact As Items
Public Sub Initialize_handler()
Set objNewContact = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts).Items
End Sub
Public Sub objNewContact_ItemChange(ByVal Item As Object)
Item.CompanyName = "NewCompanyName"
MsgBox "Company name changed to " & Item.CompanyName
End Sub
如果我通过Outlook自己编辑联系人,它将起作用。如果通过其他来源进行编辑,则会显示MsgBox,告诉我公司名称已更改,但更改未保存。
如果我添加“ Item.Save”,则会创建一个无限循环。
Public Sub objNewContact_ItemChange(ByVal Item As Object)
Item.CompanyName = "NewCompanyName"
MsgBox "Company name changed to " & Item.CompanyName
Item.Save
End Sub
答案 0 :(得分:0)
您可以在If
语句中包装change方法的内部行为。
这样,它将在第二次迭代时停止无限循环,因为该项目将不再更新:
Public Sub objNewContact_ItemChange(ByVal Item As Object)
If Item.CompanyName != "NewCompanyName" Then
Item.CompanyName = "NewCompanyName"
MsgBox "Company name changed to " & Item.CompanyName
Item.Save
End If
End Sub
答案 1 :(得分:0)
您可以在更改Item.CompanyName
之前关闭ItemChange事件处理程序。
Public Sub objNewContact_ItemChange(ByVal Item As Object)
' event handler off
Set objNewContact = Nothing
Item.CompanyName = "NewCompanyName"
Item.Save
MsgBox "Company name changed to " & Item.CompanyName
' event handler on
Initialize_handler
End Sub