【问题标题】:VBA - An outgoing call cannot be made since the application is dispatching an input-synchronous callVBA - 由于应用程序正在调度输入同步调用,因此无法进行传出调用
【发布时间】:2016-12-21 20:00:00
【问题描述】:

我想使用 Microsoft Visual Basic for Applications 通过代码发送电子邮件。 Microsoft Outlook 12.0 对象库在工具/参考下被选中。代码编译无误。该代码在两台不同的机器上运行良好,但是当我在第三台机器上测试它时,它在执行第 2 行时出现错误。

Dim email As Outlook.MailItem
Set email = Application.CreateItem(olMailItem)
    email.To = "myemailaddress@gmail.com"
    email.Subject = "Subject"
    email.Body = "Body"
    email.Send
Set email = Nothing

我查看了许多关于此错误的帖子,但找不到匹配的解决方案。提前感谢您的帮助。

【问题讨论】:

  • 他们都运行相同版本的 Outlook 吗?你遇到了什么错误?
  • 您是否在第三台机器上运行 Outlook 中的代码?
  • @Marcelo:他们都运行相同版本的 Outlook。我收到的错误是“错误 # -2147417843。自动化错误。由于应用程序正在调度输入同步调用,因此无法进行传出调用。”
  • @EugeneAstafiev:对不起,我不明白你的部分问题。我正在从 VBA 中运行代码。 “在 Outlook 中运行代码”是什么意思?

标签: vba email outlook basic


【解决方案1】:

该代码究竟是什么时候被执行的?它是否有机会从托盘图标事件处理程序运行?

启动一个计时器,当计时器触发时(您将退出传入的 RPC 调用),运行上面的代码。

【讨论】:

  • 代码由名为 TeleForm Reader 的高性能软件程序执行。它只是作为服务器上的应用程序(而不是在托盘中)保持打开状态。如何启动计时器来运行代码?我一直在阅读它作为一种可能的解决方案,但还没有找到一个很好的 URL 来解释如何做到这一点。谢谢。
  • 我相信第三台机器(称为 Reader)正在执行一些多线程操作,这就是尝试从第三台机器调用 Outlook 时出现错误的原因。我以前从未处理过线程。啊!如果我想不通,我可能不得不改变我的方法并尝试使用 MAPI 或使用直接 SMTP 发送电子邮件。
【解决方案2】:

谢谢大家的初步回复。原来解决问题的方法是使用 CDO 发送电子邮件。这是对我有用的代码:

Set objMessage = CreateObject("cdo.message")
Set objConfig = CreateObject("cdo.configuration")
Set Flds = objConfig.Fields
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "myExchangeServerName"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1  'basic (clear-text) authentication
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "myDomain\user@myDomain.com"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "myPassword"
Flds.Update
Set objMessage.Configuration = objConfig
objMessage.To = "toEmail@someDomain.com"
objMessage.From = "fromEmail@someOtherDomain.com"
objMessage.Subject = "My Subject"
objMessage.Fields.Update
objMessage.HTMLBody = "<p><span style=""font-family: 'Calibri','Arial','sans-serif'"";>My Body Text</span></p>"
objMessage.AddAttachment "C:/path/filename.txt"
objMessage.Send

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多