Outlook.MailItem — метод для отказа Outlook 2013

Я использую "ThisOutlookSession" и форму "UserFormWorkTime".

С Outlook 2010 проблем не возникло. Но теперь с Outlook 2013 я получаю следующую ошибку:

Ошибка

Вот мой код:

'Benutzername für E-Mail auslesen
'MsgBox Session.Accounts.Item(1).UserName
Var = Split(Session.Accounts.Item(1).UserName, ".")
Vorname = Var(0)
Name = Var(1)

' E-Mail erstellen und anzeigen
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)

If TextBoxInputWorkStart = "" Then

    With objMail
      .To = TextBoxInputTo
      .CC = TextBoxInputCC
      .Subject = "Arbeitszeit " + TextBoxInputDate + ""
      .HTMLBody = "Sehr geehrte Damen und Herren," & "<br><br>" & "aufgrund " & TextBoxInputReason & " war keine Zeiterfassung möglich." & "<br><br>" & "Ende: " & TextBoxInputWorkEnd & "<br><br>" & "Vielen Dank für das Eintragen" & "<br>" & Vorname & " " & Name
      ' A dialog box is open. Close it and try again => avoid this error, display it modelessly
      Unload Me
      objMail.Display

    End With

person RedLeffer    schedule 16.07.2015    source источник
comment
Что в сообщении написано на английском? Кажется, это строка .To = TextBoxInputTo, в которой есть проблема. Вы правильно объявили objMail ранее в коде и не опубликовали эту часть?   -  person R3uK    schedule 16.07.2015
comment
Да, я объявил это в ThisOutlookSession: UserFormWorkTime.TextBoxInputTo.Text = [email protected] UserFormWorkTime.TextBoxInputCC.Text = [email protected];[email protected]   -  person RedLeffer    schedule 16.07.2015


Ответы (3)


Используйте свойство Recipients для MailItem для добавления получателей. Метод Добавить для Получателей class создает нового получателя в коллекции Recipients. Для свойства Type нового объекта Recipient установлено значение по умолчанию. значение для связанного объекта AppointmentItem, JournalItem, MailItem, MeetingItem или TaskItem и должно быть сброшено, чтобы указать другой тип получателя.

  Set myItem = Application.CreateItem(olMailItem)  
  Set myRecipient = myItem.Recipients.Add ("Eugene Astafiev")  
  myRecipient.Type = olCC

Не забудьте использовать Resolve или ResolveAll класса Recipient(s) для разрешения получателей по адресной книге .

Получаете ли вы какие-либо исключения или ошибки в коде?

person Eugene Astafiev    schedule 16.07.2015

Несколько вещей.

1) Если это Outlook VBA и вы правильно используете ThisOutlookSession, то Set objOutlook = CreateObject("Outlook.Application") не надо

2) Всегда объединяйте строки s с &, не используйте +

3) Не путайте объект с его значением .Text. Вместо TextBoxInputDate используйте TextBoxInputDate.Text.

Попробуйте следующий, немного адаптированный код:

Dim objMail As MailItem
' E-Mail erstellen und anzeigen

Set objMail = ThisOutlookSession.CreateItem(olMailItem)

With objMail
    .To = TextBoxInputTo.Text
    .CC = TextBoxInputCC.Text
    .Subject = "Arbeitszeit " & TextBoxInputDate.Text & ""
    .HTMLBody = "Sehr geehrte Damen und Herren," & "<br><br>" & "aufgrund " & TextBoxInputReason.Text & " war keine Zeiterfassung möglich." & "<br><br>" & "Ende: " & TextBoxInputWorkEnd.Text & "<br><br>" & "Vielen Dank für das Eintragen" & "<br>" & Vorname & " " & Name
    ' A dialog box is open. Close it and try again => avoid this error, display it modelessly
    Unload Me
    objMail.Display
End With
person LocEngineer    schedule 16.07.2015

Код ошибки — RPC_E_DISCONNECTED, что означает, что внепроцессный COM-сервер завершил работу, когда у вас все еще была ссылка на один из его объектов.

Обычно это происходит, когда пользователь закрывает Outlook, пока ваш код выполняет его автоматизацию.

person Dmitry Streblechenko    schedule 16.07.2015