0

我的代码在 XP 上的 Excel/Outlook 2003 中运行良好,我现在正在运行 Windows 7 Excel/Outlook 2010 并收到错误消息:

运行时错误“287”:应用程序定义的或对象定义的错误。

我的代码基于以下答案: Send an email from Excel 2007 VBA using an Outlook Template & Set Variables

我正在创建我的 Outlook 对象和 mailitem,如下所示:

Dim MyOlApp
Dim MyOlItem
Set MyOlApp = CreateObject("Outlook.Application")
Set MyOlItem = MyOlApp.CreateItemFromTemplate(Range("oftLocation").Value) 'user defined location

我引用后出现错误MyOlItem,代码正在替换中的引用.htmlBody

修改为.Body没有区别,同样的错误显示。

我在 VBA 中的引用设置为:

  • VBA
  • Microsoft Excel 14.0 对象库
  • OLE 自动化
  • Microsoft Office 14.0 对象库
  • Microsoft Forms 2.0 对象库
  • Microsoft 脚本运行时
4

2 回答 2

2

这还不是一个答案,但我想收集评论中发生的事情,因为我觉得这是迄今为止我所看到的最好的方向。

我已经测试了您问题中的代码,它对我使用 Outlook 2010 和 Excel 2010 来说效果很好。

当 Excel 尝试与 Outlook 交互时,程序访问设置开始发挥作用。

警告信息

如果您的防病毒软件已过期,我相信他们会设置为警告状态。这类似于 Windows 检测 AntiVirus 状态的方式。因此,当您从 Excel 访问 Outlook 时,通常会收到一个提示,询问该操作的权限。就我而言,在正常情况下,您将允许该操作,并且代码将正常进行。

但是,我看到人们使用用户对该提示点击“否”的逻辑捕获错误 287。对您而言,情况似乎并非如此。您需要仔细查看 Outlook 中涉及程序化访问的信任中心设置。与防病毒有交互,信任中心也会提供一些信息。如果您没有以管理员权限运行 Outlook,则此处的设置将被禁用。让我知道你想出了什么。

到目前为止我还没有明确表示,但我也想提请注意你的 AV。这是它试图阻止的事情之一。也许有一条规则被触发,阻止了这一点。

无论哪种方式,您都应该能够在另一个环境中对其进行测试,以查看它是否特别适合您的系统。我认为我们都同意它不是专门的代码,因为我知道它在其他地方也可以使用。

于 2014-12-03T18:07:21.893 回答
-3

我可以建议您可能需要打开并运行 Outlook 的副本。使用CreateObject()可能不够。

要以编程方式执行此操作,请按如下方式修改 VBA 宏:

Shell "Outlook.exe" 'Opens Outlook

' Your existing code goes here

Shell "taskkill /IM Outlook.exe" 'Closes Outlook again when code is finished (optional)
于 2014-12-01T12:21:24.400 回答