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

如何通过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

代码说明

  1. 筛选状态判断:利用任务的Visible属性,该属性返回False时表示任务被当前筛选规则隐藏。
  2. 大纲折叠判断:从目标任务的直接父任务开始,逐层向上遍历所有上级任务,检查每个父任务的OutlineExpanded属性——只要有一个父任务处于折叠状态(该属性为False),目标任务就会被隐藏。
  3. 边界处理:如果目标任务是顶级任务(无父任务),则仅需检查筛选状态即可。

使用示例

在VBA编辑器的「立即窗口」中输入以下代码测试:

' 测试第5个任务是否可见
?IsTaskVisible(ActiveProject.Tasks(5))

' 测试选中的任务是否可见
?IsTaskVisible(ActiveSelection.Tasks(1))

内容的提问来源于stack exchange,提问作者Tilo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:46:17