运行时错误 287。在 Access 中使用 VBA 通过 Outlook 发送电子邮件

Runtime error 287. Sending Emails through Outlook using VBA in Access

我有一个案例,一位用户希望收到有关何时将交付添加到 Access 数据库的通知。我能想到的最简单的方法是通过 Outlook 2010 设置自动电子邮件。以下代码是我的代码:

Dim oApp As Outlook.Application
Dim oMail As MailItem
Dim varDnoteRef2 As String
Dim varuser As String
varuser = DLookup("[Employee_Name]", "employees", "[Employee_ID]=" & TempVars!gloggedin)
varDnoteRef2 = DLast("Supplier_Dnote_Ref", "Supplier_Dnotes")

Set oApp = CreateObject("Outlook.application")
Set oMail = oApp.CreateItem(olMailItem)
oMail.Body = "A Delivery Note has been added to the Database by " & varuser & " on " & Now() & "." & _
             vbNewLine & "Delivery Note: " & varDnoteRef2
oMail.Subject = "Automatic Notification: Delivery Note"
oMail.To = "Example@Email.co.uk"
oMail.Send
Set oMail = Nothing
Set oApp = Nothing

当激活代码的人打开 Outlook 时,此代码完美运行。但是,当用户没有启动 Outlook 时,用户会在 oMail.send 行收到错误消息。

error # 287 error line 0 application-defined or object-defined error.

他们得到的是桌面上的一个小图标,它是带有 gear/cog 的 outlook 符号和 another program or application is using outlook 的消息。这是我所期望的。但是为什么发送失败?

我怎样才能解决这个错误/有解决办法吗?

Edit (Update)

更奇怪的是,当我使用 F8 单步执行我的代码时。有用!! 但是当我从表单操作调用代码时仍然不是,例如button_on_click

嗯,这是我以前从未遇到过的事情,但是,我找到了解决办法。

错误消息本身让我想知道为什么发送命令无法识别定义的应用程序。我质疑代码是否 运行ning 太快了。 (我不知道这个灯泡时刻是从哪里来的,但它已经解决了这个问题)。

我简单地插入了一个循环以在发送操作之前强制延迟。我这样做是因为 Access 无法识别 application.wait.

到目前为止测试似乎成功了!

Dim T1 As Variant
Dim T2 As Variant

T1 = Now()
T2 = DateAdd("s", 1, T1)

Do Until T2 <= T1
    T1 = Now()
Loop
oMail.Send

这个程序不会运行 经常,一天最多 5 次。所以我不担心一秒钟的延迟会导致任何实时问题。