You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:01:17