使用VBA从MS Project创建和发送Outlook预约

时间:2013-12-10 15:17:01

标签: vba outlook outlook-vba ms-project

VBA新手。

我正在使用MS Project作为任务调度程序,并在MS Project中构建了自定义视图,以便每个资源都可以查看其特定的任务。我使用下面的代码在每个资源的Outlook日历中创建约会,通过他们在MS Project中选择他们的特定任务视图并运行下面的宏。这样可以正常工作,并根据需要填写个人日记中的约会。

但是,我正在尝试扩展此代码的功能,以允许“管理员”为MS Project中的每个资源选择特定的任务视图,然后运行宏以生成要发送给每个indviudal的约会以创建在他们的日历中预约。

我遇到的问题是,虽然正确创建了Outlook约会并且在apointment的“与会者”选项卡中包含(已解析的)资源名称,但约会表单本身缺少“发送”按钮。如果我然后手动将任何其他与会者添加到它所解决的约会,并且出现“发送”按钮并且可以正确发送。

Msgbox只显示MS Project中指定的Resopurce的名称。

我在设置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

1 个答案:

答案 0 :(得分:0)

我不确定它是否会完全解决问题,但这看起来像是不正确的语法:

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

如果你使用With,那么你应该把它放在with block:

之外
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)

检查对象是否为空。

还可以使用“本地”窗口检查对象的属性 myTask应该显示一个属性列表,其中Resources(1)应该有自己的子属性,其中包括“emaiAddress”。