Vba 运行时错误287 access 2016

Vba 运行时错误287 access 2016,vba,ms-access,outlook,ms-access-2016,Vba,Ms Access,Outlook,Ms Access 2016,在我们转换为Office 2016之前,此VBA工作正常。我有两个数据库相同的VBA,但停留在不同的地方。我尝试过用电子邮件地址替换8G5DB,但仍然不起作用 Set objOutlookRecip = .Recipients.Add("8G5DB") 一个停在第一线,另一个停在第一线 Set objOutlookRecip = .Recipients.Add("8G5DB") 这是我的代码: Private Sub IRR_requested_AfterUpdate() Dim objOu

在我们转换为Office 2016之前,此VBA工作正常。我有两个数据库相同的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数据库引擎对象库

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

Set objOutlookMsg = objOutlook.CreateItem(0)
另外,请确保模块顶部有
选项Explicit

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

•应用程序的视觉基础

•Microsoft Access 16.0对象库

•OLE自动化

•Microsoft Office 16.0 Access数据库引擎对象库


正如@dbmitch前面提到的,要运行Outlook自动化,您需要Microsoft Outlook XX.X库的参考。如果你加上这个,它可能会解决你的问题。Microsoft Office对象库并没有解决这一问题。

似乎您需要更多地阅读基本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
Private Sub-IRR\u requested\u AfterUpdate()
'假定没有对Outlook的引用
'定义要使用的Outlook常量
' https://msdn.microsoft.com/en-us/library/office/aa219371(v=office.11)
常量olTo为整数=1
常量olMailItem为整数=0
将对象视为对象
Dim objOutlookMsg作为对象
Dim objOutlookRecip作为对象
“~~>如果Outlook应用程序对象已打开,请建立它
出错时继续下一步
Set objOutlook=GetObject(,“Outlook.Application”)
“~~>如果没有,则启动它
如果错误号为0,则
设置objOutlook=CreateObject(“Outlook.Application”)
如果结束
呃,明白了
错误转到0
设置objOutlookMsg=objOutlook.CreateItem(olMailItem)
带objOutlookMsg
设置objOutlookRecip=.Recipients.Add(“8G5DB”)
objOutlookRecip.Type=olTo
解决问题
.Subject=“要求IRR”
.Body=“SSN:测试”
.发送
.展示
以
设置objOutlookMsg=Nothing
设置objOutlook=Nothing
端接头

不确定您更正了什么我试着记住了红色的内容仍然不起作用您回滚的编辑是格式编辑,而不是应答当它停止时是否会给出错误消息?与之前相同编译错误用户定义类型未定义您能在VB编辑器中检查您的引用并查看是否检查了Outlook的当前版本吗?看起来您正在使用Outlook常量
olMailItem
-因此,如果不使用Outlook对象库,您将收到一个错误-除非您没有使用Option Explicit?我看不出它在任何地方定义了Getting Compile error:Invalid inside procedure Private Sub IRR_requested_AfterUpdate()Option Explicit我用Option Explicit替换Private Sub,现在我没有得到调试,也没有收到电子邮件来生成文档顶部任何代码之前的
Option Explicit
Option Explicit
Private Sub IRR\u requested\u AfterUpdate()
它不会让我这样做,它会给我一个错误编译错误:预期:语句结束我只有:Microsoft Outlook 16.0对象库;Microsoft Outlook SharePoint社交提供商;Microsoft Outlook社交提供程序扩展性和Microsoft Outlook视图控制是的,
Microsoft Outlook 16.0对象库
是正确的。XX.X代表根据您的Access版本我不知道的数字。希望这对您有所帮助。添加Microsoft outlook 16.0库后,它现在正在停止:Set-objOutlookRecip=.Recipents。添加(“8G5DB”)尝试将8G5DB更改为此号码的电子邮件地址,但此行仍出现错误“停止”是什么意思?它是否引发了某种错误?获取调试运行时错误287应用程序定义的错误或对象定义的错误当我单击“调试”时,它将突出显示此集合objOutlookRecip=.Recipents.Add(“8G5DB”)