无法使 Outlook 应用程序对象工作

无法使 Outlook 应用程序对象工作

我正在尝试编写一个程序,列出 Outlook 电子邮件分发列表的成员。

我发现 VBA 似乎有一些对象可以实现这一点,但我还不能让它工作。我研究过这篇微软文章在 Outlook 应用程序对象上,这个有关GetDefaultFolder方法,并参考了许多其他资料,并提出了以下方案:

Set Application = CreateObject("Outlook.Application")
Set myNameSpace = Application.GetNameSpace("MAPI") 
Set myFolder = myNameSpace.GetDefaultFolder(olFolderContacts) 
myFolder.Display

但是,当我使用 wscript 或 cscript 运行它时,我得到以下结果:

Microsoft VBScript 运行时错误:无效的过程调用或参数:“myNameSpace.GetDefaultFolder”

谁能看出问题出在哪里?

答案1

您的代码无法正常工作的原因在于,当您访问具有后期绑定的库时(例如通过使用)CreateObject("Outlook.Application"),库中内置的枚举不可用。

由于您没有使用Option Explicit指令,Excel 已自动将其声明olFolderContacts为类型为 Variant 的变量,其值为Empty是错误消息所指的无效参数。

如果您希望继续使用后期绑定,请添加以下代码以使常量可用:

  'v0.1.1
  ' Required if late binding Outlook
  ' (Note that this list excludes newer values available in Outlook 2010 or later)
  Private Enum OlDefaultFolders
    olFolderDeletedItems = ------------3
    olFolderOutbox = ------------------4
    olFolderSentMail = ----------------5
    olFolderInbox = ------------------(6)
    olFolderCalendar = ----------------9
    olFolderContacts = --------------(10)
    olFolderJournal = ----------------11
    olFolderNotes = ------------------12
    olFolderTasks = ------------------13
    olFolderDrafts = ----------------(16)
    olPublicFoldersAllPublicFolders = 18
    olFolderConflicts = --------------19
    olFolderSyncIssues = ------------(20)
    olFolderLocalFailures = ----------21
    olFolderServerFailures = --------(22)
    olFolderJunk = ------------------(23)
    olFolderRssFeeds = --------------(25)
    olFolderToDo = ------------------(28)
    olFolderManagedEmail = ----------(29)
  End Enum

或者对值进行硬编码:

'v0.1.0
Set OutlookApp = CreateObject("Outlook.Application")
Set myNamespace = OutlookApp.GetNameSpace("MAPI")
Set myFolder = myNamespace.GetDefaultFolder(10)
myFolder.Display

请注意,我已经更改了 Outlook 应用程序对象的变量名称,以避免与内置Application对象混淆。


我发现使用早期绑定效果更好,至少在开发代码时是这样。您可以通过将对 Outlook 对象库的引用添加到项目来实现此目的:

工作表截图

并使用以下代码:

'v0.1.0
Dim OutlookApp As Outlook.Application
Set OutlookApp = New Outlook.Application
Dim myNamespace As Outlook.Namespace
Set myNamespace = OutlookApp.GetNameSpace("MAPI")
Dim myFolder As Outlook.MAPIFolder
Set myFolder = myNamespace.GetDefaultFolder(olFolderContacts)
myFolder.Display

最后一条建议是始终使用Option Explicit指令,并始终明确声明所有变量。

确保这种情况发生的最佳方法是设置以下Require Variable Declaration选项:

工作表截图

这样,VBE 将始终在创建的每个模块中插入该指令。

答案2

我遇到了同样的问题,并尝试使用 Set OA = Outlook.Application 来替换 Set OA = CreateObject("Outlook.Application")

我正在使用 Microsoft Office 365 和 Outlook 365 系统。而且它可以正常工作。

相关内容