【发布时间】:2020-07-09 06:30:24
【问题描述】:
我有一个案例,一位用户希望收到有关何时将交付添加到 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 应用程序定义或对象定义的错误。
他们得到的是桌面上的一个小图标,它是带有齿轮/齿轮和消息的 Outlook 符号 another program or application is using outlook。这是我所期望的。但是为什么发送失败呢?
如何解决此错误/有解决方案吗?
编辑(更新)
更奇怪的是,当我使用 F8 单步执行我的代码时。有用!!
但是当我从表单操作调用代码时仍然不是,例如button_on_click
【问题讨论】:
-
如果你有 SMTP 服务器(不仅仅是 Exchange 服务器),你可以考虑Blat(免费,命令行)或Chilkat Email ActiveX(商业,非常强大)。
-
我的代码非常相似......所以我不知道你的代码有什么问题。我的将打开 Outlook。我发现的唯一区别是 oMail 的 Dim。我的是
Dim oMail As Outlook.MailItem。我想不妨试试看,但我怀疑这是问题所在。 -
您也可能在通过 Outlook 发送时遇到安全问题,因为它需要手动确认每封外发电子邮件,并且为了禁用它,用户需要管理员权限。如果 Outlook 不是强制性的,我可以共享 VBA 代码以通过 Gmail 发送。
-
@CyberClaw 正如预期的那样,这并没有改变结果。我开始质疑 Outlook 信任中心设置是否需要更改。
标签: vba ms-access outlook outlook-2010