为Project任务下的分配写入信息遇到了困惑

阿信 165 信誉分
2026-09-11T03:30:29.44+00:00

您好,通过代码为Project任务的分配写入信息,以在“资源使用情况”视图中使用,代码如下:

【问题】:经过测试,对于任务已有分配,ass.Text1 = "A"和ass.Number1 = 10 中的Text1和Number1,Project似乎认为y这两个字段是“任务”类型字段,在“任务分配情况”视图中能看到写入结果。但在“资源使用情况”视图中看不到结果。

我又试了下,把ass.Delete()重新Add,再ass.Text1 = "A"和ass.Number1 = 10 ,Project就认为Text1和Number1是“资源”类型字段了,在“资源使用情况”视图中就能看到结果了。那么,如果要为任务分配的“资源”类型字段写信息,只能新建分配么?

                For Each ass As Assignment In tsk.Assignments  '遍历已知任务下的分配
                    If ass.Resource.Group.Contains("A") Then  '如果所分配资源的资源组名包含"A"
                        ass.Units = 100        '写入分配单位,能执行
                        ass.Text1 = "A"        '在分配的text1字段写入“A”,能写入任务类型text1中
                        ass.Number1 = 10   '在分配的Number1 字段写入10,能写入任务类型number1中
                        Exit For
                    End If
                Next
Microsoft 365 和 Office | Project | 商业版 | Windows
0 个注释 无注释

问题作者接受的答案
Hani-Ng 2,070 信誉分 独立顾问
2026-09-11T04:12:59.95+00:00

注:此回复已自动翻译。因此,它可能包含语法错误或表达尴尬。

您好 阿信

从您提供的代码及测试结果来看,这种行为比较特殊。 根据微软官方文档:

  • Assignment.Text1 property (Project) 被定义为可读写(Read/Write)的 String 属性,用于获取或设置分配(Assignment)的本地文本自定义字段值。 (Project) (Assignment.Text1 属性 | Microsoft Learn
  • Assignment.Number1 property (Project) 被定义为可读写(Read/Write)的 Double 属性,用于获取或设置分配(Assignment)的本地数字自定义字段值。 VBA-Docs/api/Project.Assignment.Number1.md at main · MicrosoftDocs/VBA-Docs (请注意,本帖中提供的参考资料仅提供英文版本。如需了解相关内容,我建议您使用可信赖的翻译工具或翻译服务进行辅助阅读。。)

从文档说明来看,Text1 和 Number1 理论上应当可以直接对现有的 Assignment 对象进行写入,而不仅限于新建的 Assignment。

您也可以尝试使用 SetField 方法,而不是直接对属性赋值:

ass.SetField pjAssignmentText1, "A"
ass.SetField pjAssignmentNumber1, "10"

由于 ass.Units = 100 可以正常执行,而 ass.Text1 和 ass.Number1 无法更新;同时您测试发现删除后重新创建 Assignment 又能够成功写入字段值,因此该问题更有可能与分配字段配置、项目类型,或特定版本中的行为差异有关,而不一定是 Project VBA 对象模型本身的限制。

为了进一步分析问题,烦请提供以下信息:

  • Microsoft Project 的具体版本及 Build 号(文件 > 帐户 > 关于 Project)。
  • 当前项目是本地 MPP 文件,还是连接到 Project Online / Project Server。
  • Assignment Text1 和 Assignment Number1 字段是否配置了公式(Formula)或图形指示器(Graphical Indicators)。
  • 执行代码时是否出现运行时错误,还是代码能够正常运行但字段值没有更新。
  • 使用上述 SetField 方法测试后的结果。

在获得上述信息后,可以进一步判断该问题是由字段配置、项目类型,还是当前所使用的 Project 版本引起的。

希望以上信息能够为您提供帮助,期待您的回复。

此答案是否有帮助?

2 个人认为此答案很有帮助。

0 个其他答案

排序依据: 非常有帮助

你的答案

提问者可以将答案标记为“已接受”,审查方可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。