【问题标题】:How to prevent a local resource assigments on a task by event handler?如何防止事件处理程序对任务进行本地资源分配?
【发布时间】:2020-07-01 06:52:13
【问题描述】:

我想阻止将本地资源分配给任务。 只能分配公司资源。 事件处理器分配时如何实现?

【问题讨论】:

    标签: vba ms-project


    【解决方案1】:

    这可以通过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
    

    【讨论】:

    • 嗯,成功了!谢谢你!但是有一个问题:如果直接在“任务信息”对话框中修改分配 - 它适用于两个事件处理程序。是否可以只制作一部作品而取消第二部作品?
    • 哦,如果只使用一个事件处理程序(在直接修改的分配上) - 它也可以在任务信息对话框中修改分配时工作。
    • 在 Project 中修改分配的第一种方法在哪里。
    • 在 Project 中修改分配的第一种方法在哪里。在项目菜单中:资源 -> 资源分配。可能我的任务以另一种方式解决:通过事件处理程序阻止在资源列表中创建本地资源?它将把我们从几个事件处理程序中解救出来。
    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多