【问题标题】:Convert Outlook Contact Group early binding Excel VBA to late binding将 Outlook 联系人组早期绑定 Excel VBA 转换为后期绑定
【发布时间】:2020-06-24 05:43:12
【问题描述】:

我正在尝试将 Excel 中的电子邮件地址列表插入到 Outlook 中的联系人组中。

我在网上找到了 Excel VBA 代码。它使用早期绑定。当用户打开文件时,不能强制用户进入工具-> 参考-> Outlook。

我需要将代码从早期绑定转换为后期绑定。

问题:

  • 我了解我需要将 Outlook.Application 更改为 CreateObject('Outlook.Application') 我可以访问 olFolderContacts 用数字 10 代替。请参阅下面的代码。
  • 我不知道如何访问其余项目,例如 CreateItem(olDistributionListItem).
Sub CreateContactGroupfromExcel()
Dim objContactsFolder As Outlook.Folder
Dim objContact As Outlook.ContactItem
Dim objContactGroup As Outlook.DistListItem
Dim objNameCell As Excel.Range
Dim objEmailCell As Excel.Range
Dim strName As String
Dim strEmail As String
Dim objTempMail As Outlook.MailItem
Dim objRecipients As Outlook.Recipients

Set objContactsFolder = Outlook.Application.Session.GetDefaultFolder(olFolderContacts)
Set objContactGroup = Outlook.Application.CreateItem(olDistributionListItem)

'You can change the contact group name
objContactGroup.DLName = "PlaceHolder_VBA"

i = 0

Do While Range("vba_email_outlook").Offset(i, 0).Value <> "":
    strName = Range("vba_name_outlook").Offset(i, 0).Value
    strEmail = Range("vba_email_outlook").Offset(i, 0).Value

    Set objContact = objContactsFolder.Items.Find("[FullName] = '" & strName & "'")

    'If there is no such a contact, create it.
    If objContact Is Nothing Then
        Set objContact = Outlook.Application.CreateItem(olContactItem)
        With objContact
            .FullName = strName
            .Email1Address = strEmail
            .Save
        End With
    End If

    'Add the contacts to the new contact group
    Set objTempMail = Outlook.CreateItem(olMailItem)
    objTempMail.Recipients.Add (strName)
    Set objRecipients = objTempMail.Recipients
    objContactGroup.AddMembers objRecipients

    i = i + 1

Loop

'Use "objContactGroup.Save" to straightly save it
objContactGroup.Display
objTempMail.Close olDiscard
End Sub

【问题讨论】:

  • 为什么是 ms-access 标签?

标签: excel vba outlook


【解决方案1】:
  1. 将对象变量声明为通用对象 Dim objContactsFolder As Object

  2. 确定常数的数值。使用早期绑定,这些值可以在悬停在常量上或在 VBA 即时窗口中看到:?olMailItem。然后引用数字代替常量或保留引用的常量,并使用 Const 语句将它们声明为常量。 Const olMailItem = 0

olFolderContacts = 10

olMailItem = 0

olDistributionListItem = 7

【讨论】:

    【解决方案2】:

    我不是专家,但此代码允许您在运行 VBA 脚本时添加引用,但这意味着如果出错,代码将退出运行,您将无法调试。

    On Error Resume Next ''' If reference already exist this would cause an error 
    Application.VBE.ActiveVBProject.References.AddFromFile ("C:\Program Files (x86)\Microsoft Office\Office16\MSOUTL.OLB") ''' Might have to change file path
    On Error GoTo 0
    

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 2011-07-17
      • 1970-01-01
      • 2023-03-29
      • 2016-12-15
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      相关资源
      最近更新 更多