2013-06-28 3 views
3

Может ли кто-нибудь сказать мне, почему я получаю сообщение «Ошибка времени выполнения 91» в моей функции ниже? Это происходит на этой линии:Ошибка времени выполнения '91' & Outlook.Application = <Объектная переменная или с переменной блока не установлена>?

Set olMailItem = olApp.CreateItem(olMailItem) 

Кроме того, всякий раз, когда я нахожусь в отладки и поместить мой курсор на эту строку, Access дает мне это сообщение: «Outlook.Application = < переменная объекта или переменная блока не установлен > ":

Dim olApp As New Outlook.Application 

Я пытаюсь создать кнопку, которая будет открывать сообщения электронной почты кругозора и разрешить ввод данных клерка редактировать сообщения перед его отправкой. Я проверил свои ссылки, и у меня проверена библиотека объектов Microsoft Outlook 14.0.

Кроме того, если у вас есть предложения по повышению эффективности моего кода, поделитесь им. Я довольно новичок в программировании Access.

Private Sub EmailButton_Click() 
    Dim EmailThis As String 

    EmailThis = CreateEmailWithOutlook("[email protected]", "Testing e-mail Access database", "This is a test") 
    DoCmd.SendObject acSendForm, "SubmitNewIdeaForm", , "My Name", , "Test", , True 
    On Error GoTo CreateEmail_Exit 

CreateEmail_Exit: 
    Exit Sub 

End Sub 

Public Function CreateEmailWithOutlook(MessageTo As String, Subject As String, MessageBody As String) 

    ' Define app variable and get Outlook using the "New" keyword 
    Dim olApp As New Outlook.Application 
    Dim olMailItem As Outlook.MailItem ' An Outlook Mail item 

    Set olApp = CreateObject("Outlook.Application") 
    ' Create a new email object 
    Set olMailItem = olApp.CreateItem(olMailItem) 

    ' Add the To/Subject/Body to the message and display the message 
    With olMailItem 
     .To = MessageTo 
     .Subject = Subject 
     .Body = MessageBody 
     .Display ' To show the email message to the user 
    End With 

    ' Release all object variables 
    Set olMailItem = Nothing 
    Set olApp = Nothing 

End Function 

ответ

4

Проблема заключается в том, что, с библиотекой справки Outlook, включена, olMailItem является зарезервированным постоянным, и я думаю, когда вы Dim olMailItem as Outlook.MailItem, что это не проблема, но при попытке установить переменную вызывает проблему.

Вот полное объяснение:

Вы объявили olMailItem в качестве переменной объекта.

  • Справа от оператора присваивания вы ссылаетесь на это Object перед установкой его значения в экземпляр объекта. Это в основном рекурсивная ошибка, так как у вас есть объект, пытающийся присвоить себе себя.
  • Существует еще одна потенциальная ошибка, если ранее была назначена olMailItem, этот оператор вызвал бы еще одну ошибку (вероятно, ошибку Mismatch, поскольку константа olMailItem является целым числом, но, используя это имя неадекватно, вы можете ввести ошибку несоответствия путем передачи Object где Integer ожидается

Попробуйте изменить имя этой переменной olMailItem к чему-то еще, как mItem Этот код проверяется в Excel 2010, Windows 7, я думаю, он должен работать для доступа, тоже..:

Dim olApp As New Outlook.Application 
Dim mItem As Outlook.MailItem ' An Outlook Mail item 

Set olApp = CreateObject("Outlook.Application") 
Set mItem = olApp.CreateItem(olMailItem) 
' Add the To/Subject/Body to the message and display the message 
With mItem 
    .To = MessageTo 
    .Subject = Subject 
    .Body = MessageBody 
    .Display ' To show the email message to the user 
End With 

' Release all object variables 
Set mItem = Nothing 
Set olApp = Nothing 
+0

Это решило это! Спасибо, Дэвид! – candyA