【问题标题】:MS Project formula calculation returns inconsistent resultsMS Project 公式计算返回不一致的结果
【发布时间】:2021-01-09 02:01:27
【问题描述】:

在 MS Project Professional 中,我有一个自定义字段,它返回正确的值...有时,在其他时候没有值,而在其他时候,#ERROR 没有明显的韵律或原因。

目标:我需要捕获 [Resource Names] 字段以在外部应用程序中使用 - 很简单 - 但是当我有一个资源单元有限的固定单元任务时,我需要排除“[##%]”名称的一部分。示例:Sam[25%] 但我只需要“Sam”

公式:IIf(IsNumeric(InStr(1,[Resource Names],"[")),LEFT([Resource Names],Len([Resource Names])-5),[Resource Names])

结果总结:

  • 玛丽安 == M
  • 山姆 == #ERROR
  • 山姆[25%] ==山姆
  • IDNR == #ERROR
  • 核心开发 == Cor
  • 宾杜 == 宾杜
  • 宾杜[50%] ==宾杜
  • 米歇尔 == 米
  • 米歇尔[25%] == 米歇尔
  • Disha == 空
  • 迪莎[33%] ==迪莎
  • 斯图尔特[50%] == 斯图尔特
  • 斯图尔特 == S

奇怪的是,摘要任务没有显示正确的值。

需求:有人可以帮我修正公式吗?或者,我应该把它收起来,然后手动删除有问题的括号和数字吗?

【问题讨论】:

    标签: formula project project-management ms-project


    【解决方案1】:

    如果您只为一项任务分配了一个资源,则此公式适用:IIf(0=InStr(1,[Resource Names],"["),[Resource Names],Left([Resource Names],InStr(1,[Resource Names],"[")-1))

    但是,由于可用功能有限,构建一个处理多个资源的公式将非常乏味。在这种情况下,更新字段的宏会更好:

    Sub GetResourceNames()
        Dim t As Task
        For Each t In ActiveProject.Tasks
            Dim resList As String
            resList = vbNullString
            Dim a As Assignment
            For Each a In t.Assignments
                resList = resList & "," & a.Resource.Name
            Next a
            t.Text2 = Mid$(resList, 2)
        Next t
    End Sub
    

    【讨论】:

    • 辉煌;感谢您的解决方案。你能解释为什么你的公式有效而我的无效吗?
    • Instr 始终返回一个数字(如果未找到字符串,则返回 0),因此您的 IIf 始终评估为 True 部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多