ошибка выполнения 287 доступа 2016 - PullRequest
0 голосов
/ 03 мая 2018

Этот 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 Automation
  • Ядро базы данных Microsoft Office 16.0 Access Object Libary

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Итак ...

В своем вопросе и комментариях вы перечислили следующие ссылки в базе данных:

• Визуальные основы для приложений;

• Библиотека объектов Microsoft Access 16.0;

• OLE Automation

• Ядро базы данных Microsoft Office 16.0 Access Object Libary

Как уже упоминалось @dbmitch, для запуска автоматизации Outlook вам необходима ссылка на Microsoft Outlook XX.X Library. Если вы добавите это, это может исправить ваши проблемы. Библиотека объектов Microsoft Office не обрезает его.

0 голосов
/ 04 мая 2018

Похоже, вам нужно немного больше прочесть о базовом кодировании 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
0 голосов
/ 03 мая 2018

Не распознается ваш параметр для objOutlookMsg. попробовать:

Set objOutlookMsg = objOutlook.CreateItem(0)

Также убедитесь, что Option Explicit находится в верхней части вашего модуля.

...