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
相关产品推荐
相关产品推荐

