Создать и отправить по электронной почте встречу из MS Project с VBA

Новичок в VBA.

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

Однако я пытаюсь расширить функциональность этого кода, чтобы позволить «администратору» выбирать определенные представления задач для каждого ресурса в MS Project, а затем запускать макрос для создания встреч, которые будут отправлены каждому индивудалу, чтобы создать встречу в их календарь.

Проблема, с которой я столкнулся, заключается в том, что, хотя встреча Outlook создается правильно и включает (разрешенное) имя ресурса на вкладке «Посетители» встречи, в самой форме встречи отсутствует кнопка «Отправить». Если я затем вручную добавлю к встрече любого другого участника, она будет разрешена, и появится кнопка «Отправить», и ее можно будет отправить правильно.

Msgbox просто отображает имя назначенного Resopurce в MS Project.

Я пробовал несколько вариантов настройки myDelegate, но безуспешно, любые мысли по этому поводу были бы очень признательны.


Option Explicit
Public myOLApp As Object
Sub Export_Selection_to_OL_Appointments_AutoEmail()
    Dim myTask As Task
    Dim myDelegate As Object
    Dim myItem As Object
    Dim Msg As Object

    On Error Resume Next
    Set myOLApp = CreateObject("Outlook.Application")
     For Each myTask In ActiveSelection.Tasks
     Set myItem = myOLApp.CreateItem(1)
     myItem.Assign
      With myItem
        Set myDelegate = myItem.Recipients.Add(myTask.Resources(1).EMailAddress)
        myDelegate.Resolve
        Msg = MsgBox("myDelegate is " & myDelegate, vbOKOnly)
        .Start = myTask.Start
        .End = myTask.Finish
        .Subject = myTask.Text1 & ": " & myTask.Text2
        .Categories = myTask.Project
        .Body = myTask.Notes
        .Display
        .Send
      End With
  Next myTask
End Sub

person Bob    schedule 10.12.2013    source источник


Ответы (1)


Я не уверен, что это решит проблему полностью, но это похоже на неправильный синтаксис:

With myItem
    Set myDelegate = myItem.Recipients.Add(myTask.Resources(1).EMailAddress)
End with 

Если вы используете With, вы должны либо поместить его за пределы блока with:

Set myDelegate = myItem.Recipients.Add(myTask.Resources(1).EMailAddress)
With myItem
'...
End with 

или получить доступ к свойствам следующим образом:

With myItem
Set myDelegate = .Recipients.Add(myTask.Resources(1).EMailAddress)
End with 

Также используйте

debug.print(ActiveSelection.Tasks & " ; " & myTask)

чтобы проверить, не является ли объект нулевым.

Также используйте окно «locals» для проверки свойств ваших объектов.
myTask должен отображать список свойств, среди которых Resources (1) должен иметь свои собственные подсвойства, среди которых «emaiAddress».

person html_programmer    schedule 10.12.2013
comment
Ким, спасибо за вклад. Обновленный набор работает нормально, но отладка завершается неудачно, аргумент не является необязательным (в задачах). - person Bob; 20.12.2013
comment
Ким, я забыл поблагодарить вас за местных жителей и смотровые окна, они оказались полезными, и я продолжу работать над проблемой. Если у yiu есть еще какие-то мысли, это будет очень полезно. Rgds Bob - person Bob; 20.12.2013
comment
Это была ошибка. debug.print(myTask) но я не уверен, что это сработает. Я бы продолжил отладку с помощью окна локальных переменных, это самый простой способ увидеть свойства объекта. - person html_programmer; 23.12.2013