Vba 已在“甘特图”视图中创建自定义字段,并希望显示在“资源使用情况”视图中

Vba 已在“甘特图”视图中创建自定义字段,并希望显示在“资源使用情况”视图中,vba,custom-fields,ms-project,Vba,Custom Fields,Ms Project,我正在使用MS Project列出我所在部门正在进行的所有项目和工作。我在甘特图视图中为每个任务和子任务创建了自定义字段(Text 1(项目名称)和Text 2(项目编号))。如何创建宏以使这些数据与我在“甘特图”视图中输入的所有数据一起显示在“资源使用情况”视图中?我想查看我所有资源的列表,以及分配给它们的任务,并查看每个任务的自定义字段。谢谢。您在“资源使用情况”视图中看到的“任务”数据和您在“任务使用情况”视图中看到的“资源”数据实际上是分配数据 更新 感谢@Andrew对作业的两组自定义

我正在使用MS Project列出我所在部门正在进行的所有项目和工作。我在甘特图视图中为每个任务和子任务创建了自定义字段(
Text 1(项目名称)
Text 2(项目编号)
)。如何创建宏以使这些数据与我在“甘特图”视图中输入的所有数据一起显示在“资源使用情况”视图中?我想查看我所有资源的列表,以及分配给它们的任务,并查看每个任务的自定义字段。谢谢。

您在“资源使用情况”视图中看到的“任务”数据和您在“任务使用情况”视图中看到的“资源”数据实际上是分配数据

更新

感谢@Andrew对作业的两组自定义文本字段的说明,我更新了代码,使任务的Text1字段在任务使用视图和资源使用视图中都可见

下面是一个宏,它用任务的Text1字段更新分配Text1字段:

Sub UpdateAssignmentInfo()
    Dim tsk As Task
    Dim asn As Assignment
    For Each tsk In ActiveProject.Tasks
        For Each asn In tsk.Assignments
            asn.Text1 = tsk.Text1
        Next asn
    Next tsk
    Dim res As Resource
    For Each res In ActiveProject.Resources
        For Each asn In res.Assignments
            asn.Text1 = asn.Task.Text1
        Next asn
    Next res
End Sub

有两组自定义字段用于指定。Resource.assignments和task.assignments

如果通过VBA中的tasks集合或客户端中的task usage视图引用分配,则将更新task.assignment字段

如果通过“资源”集合或“资源使用情况”视图访问分配,则更新的是resource.assignments字段

如果希望两者对齐,则需要一个例程,该例程逐步完成所有任务,然后完成每个任务的每个分配,然后通过资源集合找到相同的分配,并设置task.assignments.text21=resources.assignments.text21(例如)


我想这是在2007年推出的,微软并不认为它是一个bug,它只是一个新功能。

你尝试过什么?请展示一些源代码,并明确说明您的问题所在。我已经尝试过了,但我认为我做得不对。Sub test()'用于跟踪当前任务和资源Dim T As task Dim R As Resource Dim A As Assignment Set ts=ActiveProject.Tasks'针对ActiveProject中的每个T在项目中循环执行所有任务。Tasks'检查任务是否为空,如果不是T,则T为空,然后'针对每个R在每个资源中循环执行任务'Tasks.Assignment如果Assignments=T.Name,则R.Text1=T.Text1如果Next结束,则R结束如果Next T结束子任务。还是有点不对劲。我运行了那个宏,但仍然没有在resource usage视图中获得填充Text1字段的任何数据。所以你是说我的数据已经接近了,但我只需要更正每个文本字段的映射?我的VBA技能非常缺乏。抱歉。查看您的代码示例,您实际上没有使用assignment.text1字段-您正在尝试将task.text1字段映射到resource.text1字段,因为任务和资源之间存在多对多关系,因此该字段实际上不起作用(即,一个任务可以有多个资源,一个资源可以分配给多个任务)。代码只需将resource.text1字段设置为分配给它们的最后一个任务的task.text1字段。如果最后一个任务没有text1值,则资源也没有。您可能希望将这些值连接在一起,以便resource.text1字段将是解析的任务的所有text1值的列表源被分配到。例如,R.Text1=R.Text1&T.Text1您是说这应该有效。'Sub test()Dim T As Task Dim R As Resource Dim A As Assignment Set ts=ActiveProject。ActiveProject中每个T的任务。如果不是T,则Tasks中的每个R都为Nothing。如果Assignments=T,则Assignment为T.Name,则R.Text1=R.Text1&T.Text1 End If Next R End If Next T End Sub'