运行时错误287访问2016

时间:2018-05-03 13:09:09

标签: access-vba outlook-vba ms-access-2016

此VBA在我们转换为Office 2016之前工作。我有2个数据库相同的VBA但停在不同的地方。我尝试用电子邮件地址替换8G5DB,但仍无法正常工作

Set objOutlookRecip = .Recipients.Add("8G5DB")

一个停在第一行,另一个停在

Set objOutlookRecip = .Recipients.Add("8G5DB")

这是我的代码:

Private Sub IRR_requested_AfterUpdate()
Dim objOutlook As Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
Dim objOutlookRecip As Outlook.Recipient

Set dbs = CurrentDb
'  Set rst = dbs.OpenRecordset("tblCIPReqEmails")
'    rst.MoveFirst  

Set objOutlook = CreateObject("Outlook.Application")
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
    Set objOutlookRecip = .Recipients.Add("8G5DB")
    objOutlookRecip.Type = olTo            

    .Subject = "IRR Requested"
    .Body = "SSN: " & Forms!frmAccession!SSN & vbCrLf & vbCrLf & " Employee Name: " & Forms!frmAccession![First Name] & " " & Forms!frmAccession![Middle Name] & " " & Forms!frmAccession![Last Name] & vbCrLf & vbCrLf & " IRR Requested: " & Forms!frmAccession![IRR requested] & vbCrLf & vbCrLf & "What Prior service is missing and dates of service" & vbCrLf & vbCrLf & "Give OPF to Specialist" & vbCrLf & vbCrLf & "Thank You." & vbCrLf & vbCrLf
    .Importance = olImportanceHigh       

    For Each objOutlookRecip In .Recipients
        objOutlookRecip.Resolve
        If Not objOutlookRecip.Resolve Then
        objOutlookMsg.Display
    End If
    Next
  '        .Send
    objOutlookMsg.Display

End With
Set objOutlookMsg = Nothing
Set objOutlook = Nothing
End Sub

编辑 - 来自评论

检查以下参考文献:

  • 应用程序的可视化基础;
  • Microsoft Access 16.0对象库;
  • OLE自动化
  • Microsoft Office 16.0 Access数据库引擎Object Libary

3 个答案:

答案 0 :(得分:1)

看起来你需要对基本的VBA编码做更多的阅读 - 特别是关于事情的故障排除和调试 - 每个编码人员都必须知道如何跨越他们的行并检查变量的内容以找到问题。

话虽如此,假设您没有引用Outlook库,如何简化测试代码以查看是否可以发送电子邮件

    Private Sub IRR_requested_AfterUpdate()

        ' assume no references to Outlook
        ' Define Outlook constants to be used
        ' https://msdn.microsoft.com/en-us/library/office/aa219371(v=office.11).aspx

        Const olTo             as Integer = 1
        Const olMailItem       As Integer = 0

        Dim objOutlook As Object
        Dim objOutlookMsg As Object
        Dim objOutlookRecip As Object

        '~~> Establish an Outlook application object if it is already open
        On Error Resume Next
        Set objOutlook = GetObject(, "Outlook.Application")

        '~~> If not then, launch it
        If Err.Number <> 0 Then
            Set objOutlook = CreateObject("Outlook.Application")
        End If
        Err.Clear
        On Error GoTo 0

        Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
        With objOutlookMsg
            Set objOutlookRecip = .Recipients.Add("8G5DB")
            objOutlookRecip.Type = olTo            
            objOutlookRecip.Resolve

            .Subject = "IRR Requested"
            .Body = "SSN: Test"
            .Send
            .Display

        End With
        Set objOutlookMsg = Nothing
        Set objOutlook = Nothing
   End Sub

答案 1 :(得分:0)

它无法识别objOutlookMsg的参数。尝试:

Set objOutlookMsg = objOutlook.CreateItem(0)

另外,请确保Option Explicit位于模块的顶部。

答案 2 :(得分:0)

所以......

在您的问题和评论中,您在数据库中列出了以下参考资料:

•应用程序的可视化基础;

•Microsoft Access 16.0对象库;

•OLE自动化

•Microsoft Office 16.0 Access数据库引擎Object Libary

如前所述@dbmitch,要运行Outlook自动化,您需要Microsoft Outlook XX.X Library的引用。如果你添加它,它可能会解决你的问题。 Microsoft Office对象库不会删除它。