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
答案 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”。