VBA не может отправить встречу в календаре

Когда я вручную создаю напоминание/назначение в календаре, я могу нажать «Пригласить участников» и выбрать людей, которых нужно пригласить, а затем нажать «Отправить», и все получат это напоминание/назначение в календаре.

У меня есть следующий код для создания напоминания программно, но он не будет отправлен предполагаемым получателям. Если я открою напоминание после запуска сценария и нажму «Пригласить участников», я увижу, что список заполнен людьми, которым я хочу отправить напоминание, поэтому я не совсем понимаю, почему на самом деле оно не отправляет напоминание. их.

Может ли кто-нибудь пролить свет на это для меня?

Private Function CreateAppointment(SubjectStr As String, BodyStr As String, StartTime As Date, EndTime As Date, AllDay As Boolean)
    Dim olApp As Outlook.Application
    Dim Appt As Outlook.AppointmentItem
    ' Only create the reminder if there's no duplicate
    If (CheckForDuplicates(SubjectStr) = False) Then
        Set olApp = CreateObject("Outlook.Application")
        Set Appt = olApp.CreateItem(olAppointmentItem)
        Appt.Recipients.Add ("John Doe")
        Appt.Recipients.ResolveAll
        Appt.Subject = SubjectStr
        Appt.Start = StartTime
        Appt.End = EndTime
        Appt.AllDayEvent = AllDay
        Appt.Body = BodyStr
        Appt.ReminderSet = True
        Appt.Save
        Appt.Send
    End If
    Set Appt = Nothing
    Set olApp = Nothing
End Function

person FizzBuzz    schedule 30.09.2011    source источник
comment
Хм, да, я понимаю, что вы имеете в виду! Только что попробовал. Я не знаю, почему это не отправляется! +1 полезный вопрос.   -  person Jean-François Corbett    schedule 30.09.2011
comment
То же самое. Я видел свойство под названием SendUsingAccount, где вы можете установить следующее: Application.Session.Accounts(1) . Вы бы сделали это до того, как сохранили элемент. Это все еще не имело никакого эффекта. Я изменил учетные записи (например, попробовал это на своем pop3 вместо корпоративного сервера Exchange). Кроме того, я загрузил виртуальный экземпляр Windows 2000 и Outlook XP и попробовал его там. Не повезло и нет ответа, почему это не сработало. :P Самое смешное, что в Windows 2000 я получал всплывающее окно безопасности в строке отправки, говорящее, что это приложение собирается что-то отправить. Вы хотите разрешить? Я говорю разрешить, но ничего.   -  person ray    schedule 30.09.2011
comment
Это лучше, чем мне удалось отыграться. Макро-безопасность означает, что любая функция отправки должна уведомлять пользователя перед отправкой, поэтому вы, должно быть, сделали что-то полуправильное... Надеюсь, кто-то столкнется с этим и ответит нам.   -  person FizzBuzz    schedule 01.10.2011
comment
Код работает нормально, протестирован в Outlook 2010. Я удалил оператор If (CheckForDuplicates(SubjectStr) = False) Then If, потому что его не было в списке. Обратите внимание, что из соображений безопасности некоторые действия можно выполнить только в VBA, поместив свой код в VbaProject.OTM. Если вы поместите его в другое место, он потерпит неудачу.   -  person Todd Main    schedule 05.10.2011


Ответы (2)


Собрание — это особый тип встречи — встреча, на которую приглашаются другие люди.

Чтобы назначить встречу, вам нужно сделать больше, чем просто пригласить участников. Вам необходимо установить статус «Встреча». Добавьте это в свой код:

Appt.MeetingStatus = olMeeting

Также обратите внимание, что вы установили напоминание, но не установили время напоминания. Например,

Appt.ReminderMinutesBeforeStart = 30

Наконец, если это Outlook VBA, почему вы используете CreateObject? Вы должны использовать собственный объект приложения для получения всех ваших объектов.

то есть вместо

Set olApp = CreateObject("Outlook.Application")

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

Set olApp = Outlook.Application

ХТН

person JimmyPena    schedule 08.10.2011
comment
Большое спасибо JP! Не понял, что мне нужно было установить тип встречи. - person FizzBuzz; 11.10.2011

У меня была такая же проблема, не заработало, пока не заменил

Appt.Recipients.Add ("John Doe")
Appt.Recipients.ResolveAll

С участием

Appt.RequiredAttendees = "[email protected]"

С Уважением

Крис

person Chris    schedule 18.05.2018