【发布时间】:2020-07-01 06:52:13
【问题描述】:
我想阻止将本地资源分配给任务。 只能分配公司资源。 事件处理器分配时如何实现?
【问题讨论】:
标签: vba ms-project
我想阻止将本地资源分配给任务。 只能分配公司资源。 事件处理器分配时如何实现?
【问题讨论】:
标签: vba ms-project
这可以通过Application Events 完成。因为可以直接在任务表和“任务信息”对话框中修改分配,所以需要两个事件处理程序。使用以下代码创建一个名为 Events 的类模块:
Option Explicit
Public WithEvents App As Application
Private Sub App_ProjectBeforeAssignmentChange(ByVal asg As Assignment, ByVal Field As PjAssignmentField, ByVal NewVal As Variant, Cancel As Boolean)
If Field = pjAssignmentResourceName Then
If Not ThisProject.Resources(NewVal).Enterprise Then
MsgBox "Resource '" & NewVal & "' cannot be added.", vbOKOnly, "Only enterprise resources are allowed"
Cancel = True
End If
End If
End Sub
Private Sub App_ProjectBeforeTaskChange(ByVal tsk As Task, ByVal Field As PjField, ByVal NewVal As Variant, Cancel As Boolean)
If Field = pjTaskResourceNames Then
Dim resNames() As String
resNames = Split(NewVal, ",")
Dim AllEnterprise As Boolean
AllEnterprise = True
Dim i As Integer
For i = 0 To UBound(resNames)
AllEnterprise = AllEnterprise And ThisProject.Resources(resNames(i)).Enterprise
Next i
If Not AllEnterprise Then
MsgBox "Resource Names '" & NewVal & "' is invalid.", vbOKOnly, "Only enterprise resources are allowed"
Cancel = True
End If
End If
End Sub
在 ThisProject 模块中,添加以下代码:
Option Explicit
Dim eClass As New Events
Private Sub Project_Open(ByVal pj As Project)
InitializeEventHandler
End Sub
Sub InitializeEventHandler()
Set eClass.App = Application
End Sub
【讨论】: