如何在MS Project VBA中依据自定义数字值获取任务分配自定义文本字段值?
解决VBA中动态引用Assignment自定义文本字段的问题
问题原因
你写的a.Units = "a.Text" & nr是把拼接后的字符串(比如"a.Text8")直接赋值给a.Units,而非获取a.Text8字段的实际值,这就引发了运行时错误1101(无效字段引用)。VBA不支持通过字符串拼接直接动态访问对象属性,必须用专门方法实现动态属性调用。
解决方案
使用VBA的CallByName函数,它能通过属性名称字符串来获取对象的属性值。修改后的代码如下:
Sub TransferAsgnTextX_to_AsgnTCC_viaNumberedMeans() Dim t As Task Dim a As Assignment Dim nr As Integer, i As Integer ' 修正变量声明:原nr默认是Variant,显式指定Integer更规范 i = 1 For Each t In ActiveProject.Tasks nr = ActiveProject.Tasks(i).Number1 If nr > 0 Then For Each a In t.Assignments Select Case a.ResourceName Case "Productivity" ' 用CallByName动态获取对应Text字段的值 a.Units = CallByName(a, "Text" & nr, vbGet) End Select Next a End If i = i + 1 Next t End Sub
额外优化建议
- 可以直接用
t.Number1替代ActiveProject.Tasks(i).Number1,因为当前循环的t就是对应任务,这样代码更高效易读:nr = t.Number1
内容的提问来源于stack exchange,提问作者Stephen Richards
相关产品推荐
相关产品推荐

