从带有VBA的MS Project创建outlook约会并通过电子邮件发送



VBA新手。

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

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

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

Msgbox只是显示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

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

With myItem
    Set myDelegate = myItem.Recipients.Add(myTask.Resources(1).EMailAddress)
End 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)

以检查对象是否为null。

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

最新更新