Excel создает приглашение на собрание Outlook, не может отправить

Я работаю над кодом, который создает запрос на собрание Outlook, и я хотел бы, чтобы он был отправлен в список приглашенных. Я могу создать приглашение на собрание, но не могу его отправить. Я вижу приглашение на собрание в своем календаре. Как я могу получить его для отправки?

Вот мой код:

Sub AddAppointments()
' Create the Outlook session
Set myOutlook = CreateObject("Outlook.Application")

' Start at row 2
r = 2

Do Until Trim(Cells(r, 1).Value) = ""
    ' Create the AppointmentItem
    Set myApt = myOutlook.CreateItem(1)
    ' Set the appointment properties
    myApt.Subject = Cells(r, 1).Value
    myApt.Location = Cells(r, 2).Value
    myApt.Start = Cells(r, 3).Value
    myApt.Duration = Cells(r, 4).Value
    myApt.Recipients.Add Cells(r, 8).Value
    myApt.MeetingStatus = olMeeting
    myApt.ReminderMinutesBeforeStart = 88
    myApt.Recipients.ResolveAll
    myApt.AllDayEvent = AllDay


    ' If Busy Status is not specified, default to 2 (Busy)
    If Trim(Cells(r, 5).Value) = "" Then
        myApt.BusyStatus = 2

    Else
        myApt.BusyStatus = Cells(r, 5).Value

    End If
    If Cells(r, 6).Value > 0 Then
        myApt.ReminderSet = True
        myApt.ReminderMinutesBeforeStart = Cells(r, 6).Value
    Else
        myApt.ReminderSet = False
    End If
    myApt.Body = Cells(r, 7).Value
    myApt.Save
    r = r + 1
    myApt.Send
Loop
End Sub

2 ответа

Без примера строки значений этот код трудно отладить. Таким образом, мы только подтверждаем ваше слово, что оно действительно. Но я немного исправил код.

  • Вы дважды используете ReminderMinutesBeforeStart в своем коде. Я удалил первый, потому что похоже, что он зависит от данных строки.
  • Вы вызываете метод ResolveAll, но не проверяете, разрешены ли ваши получатели. Если бы это были адреса электронной почты, я бы не стал беспокоиться.
  • Существует смесь ранних и поздних связанных ссылок. Например, вы используете 1 вместо olAppointmentItem, но позже используете olMeeting вместо 1.
  • Свойство AllDayEvent принимает логическое значение, но, поскольку вы не объявили никаких переменных, мы не можем сказать, что означает AllDay. Я преобразовал это для чтения из столбца I. Также обратите внимание, что если вы установите AllDayEvent в True, вам не нужно будет устанавливать Duration.

Предполагая допустимые значения ввода, этот код работал для меня:

Option Explicit

Sub AddAppointments()

  Dim myoutlook As Object ' Outlook.Application
  Dim r As Long
  Dim myapt As Object ' Outlook.AppointmentItem

  ' late bound constants
  Const olAppointmentItem = 1
  Const olBusy = 2
  Const olMeeting = 1

  ' Create the Outlook session
  Set myoutlook = CreateObject("Outlook.Application")

  ' Start at row 2
  r = 2

  Do Until Trim$(Cells(r, 1).value) = ""
    ' Create the AppointmentItem
    Set myapt = myoutlook.CreateItem(olAppointmentItem)
    ' Set the appointment properties
    With myapt
      .Subject = Cells(r, 1).value
      .Location = Cells(r, 2).value
      .Start = Cells(r, 3).value
      .Duration = Cells(r, 4).value
      .Recipients.Add Cells(r, 8).value
      .MeetingStatus = olMeeting
      ' not necessary if recipients are email addresses
      ' myapt.Recipients.ResolveAll
      .AllDayEvent = Cells(r, 9).value

      ' If Busy Status is not specified, default to 2 (Busy)
      If Len(Trim$(Cells(r, 5).value)) = 0 Then
        .BusyStatus = olBusy
      Else
        .BusyStatus = Cells(r, 5).value
      End If

      If Cells(r, 6).value > 0 Then
        .ReminderSet = True
        .ReminderMinutesBeforeStart = Cells(r, 6).value
      Else
        .ReminderSet = False
      End If

      .Body = Cells(r, 7).value
      .Save
      r = r + 1
      .Send
    End With
  Loop
End Sub

Пример входных значений в ячейках (включая строку заголовка):

  • A2: Моя встреча
  • B2: мой стол
  • C2: 25.11.2011 13:30:00
  • D2: 30
  • E2: 2
  • F2: 30
  • G2: давай встретимся!
  • H2: адрес электронной почты
  • I2: ЛОЖЬ

Меня устраивает!

Пожалуйста, имейте в виду, чтобы несколько строк, таких как

.Recipients.Add Cells(r, 8).value

чтобы добавить больше получателей. Поскольку запись нескольких адресов в одну ячейку разделена символом ";" приводит к ошибке при отправке на прием!

или использовать

.Recipients.ResolveAll 
Другие вопросы по тегам