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

Microsoft Project子项目资源计数问题:主项目如何统计子项目资源?

在主项目中统计所有子项目资源的解决方案

原代码仅统计主项目自身的Resources集合,而子项目的资源属于各自的子项目对象,不会自动合并到主项目的资源集合中,因此需要遍历所有子项目来收集资源。

修改后的VBA代码

Dim mainProj As Project
Dim subProj As Subproject
Dim res As Resource
Dim allResourceNames As String
Dim resourceDict As Object ' 用于去重,避免重复统计同名资源

Set mainProj = ActiveProject
Set resourceDict = CreateObject("Scripting.Dictionary")

' 收集主项目自身的资源
For Each res In mainProj.Resources
    If Not resourceDict.Exists(res.Name) Then
        resourceDict.Add res.Name, True
    End If
Next res

' 遍历所有子项目,收集子项目中的资源
For Each subProj In mainProj.Subprojects
    ' 仅处理已打开的子项目,未打开的子项目无法访问资源
    If Not subProj.Project Is Nothing Then
        For Each res In subProj.Project.Resources
            If Not resourceDict.Exists(res.Name) Then
                resourceDict.Add res.Name, True
            End If
        Next res
    Else
        ' 可选:自动打开未打开的子项目(需确保文件路径有效)
        ' subProj.Open
        ' For Each res In subProj.Project.Resources
        '     If Not resourceDict.Exists(res.Name) Then
        '         resourceDict.Add res.Name, True
        '     End If
        ' Next res
    End If
Next subProj

' 拼接所有资源名称
allResourceNames = Join(resourceDict.Keys, ", ")

' 弹出结果窗口
MsgBox allResourceNames

关键说明

  • 遍历子项目集合:通过mainProj.Subprojects访问主项目下的所有子项目
  • 子项目状态检查:未打开的子项目无法访问其资源,需确保子项目已打开,或添加自动打开逻辑
  • 资源去重:使用字典对象避免重复统计同名资源,若不需要去重可直接拼接字符串
  • 资源归属:子项目的资源存储在subProj.Project.Resources集合中,而非主项目的Resources集合

内容的提问来源于stack exchange,提问作者Sebastian Kimaczyński

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:35:18