如何通过VBA判断任务是否处于显示状态(含筛选、大纲折叠场景)
判断MS Project任务是否实际显示的VBA实现
要判断MS Project中的任务是否处于实际显示状态(未被筛选隐藏、未因上级大纲折叠被隐藏),可以通过以下VBA逻辑实现:
核心判断逻辑
任务实际显示需要同时满足两个条件:
- 任务未被当前筛选规则隐藏
- 任务的所有上级大纲任务均处于展开状态(任意上级折叠都会隐藏子任务)
VBA实现代码
Function IsTaskVisible(targetTask As Task) As Boolean ' 默认标记为可见 IsTaskVisible = True ' 第一步:检查任务是否被筛选隐藏 If Not targetTask.Visible Then IsTaskVisible = False Exit Function End If ' 第二步:检查所有上级任务是否都处于展开状态 Dim parentTask As Task Set parentTask = targetTask.Parent Do While Not parentTask Is Nothing ' 只要有一个上级任务折叠,当前任务就被隐藏 If Not parentTask.OutlineExpanded Then IsTaskVisible = False Exit Function End If ' 继续向上遍历更高级的父任务 Set parentTask = parentTask.Parent Loop End Function
代码说明
- 筛选状态判断:利用任务的
Visible属性,该属性返回False时表示任务被当前筛选规则隐藏。 - 大纲折叠判断:从目标任务的直接父任务开始,逐层向上遍历所有上级任务,检查每个父任务的
OutlineExpanded属性——只要有一个父任务处于折叠状态(该属性为False),目标任务就会被隐藏。 - 边界处理:如果目标任务是顶级任务(无父任务),则仅需检查筛选状态即可。
使用示例
在VBA编辑器的「立即窗口」中输入以下代码测试:
' 测试第5个任务是否可见 ?IsTaskVisible(ActiveProject.Tasks(5)) ' 测试选中的任务是否可见 ?IsTaskVisible(ActiveSelection.Tasks(1))
内容的提问来源于stack exchange,提问作者Tilo
相关产品推荐
相关产品推荐

