我有一个案例,其中一个用户希望收到有关何时将交付添加到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
行收到错误消息。
错误#287错误行0应用程序定义的错误或对象定义的错误。
他们得到的是桌面上的一个小图标,它是带有齿轮/齿轮的Outlook符号,并显示another program or application is using outlook
的消息。这是我的期望。但为什么发送失败呢?
如何解决此错误/是否有解决方案?
编辑(更新)
更奇怪的是,当我使用F8单步执行代码时。有用!!
但是当我从表单操作中调用代码时仍然没有,例如button_on_click
答案 0 :(得分:1)
这是我以前从未遇到的事情,但是,我找到了解决方案。
错误消息本身让我想知道为什么send命令没有识别定义的应用程序。我质疑代码是否运行得太快。 (我不知道这个灯泡的时刻来自哪里,但它解决了这个问题)。
我只是在发送操作之前插入一个循环来强制延迟。我这样做是因为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次。所以我并不担心导致任何实时问题的一秒延迟。