【问题标题】:MS Project: Loop through filtered tasksMS Project:循环过滤任务
【发布时间】:2018-04-26 07:00:31
【问题描述】:

我想从 MS-Project 将满足筛选条件的任务名称复制到 Excel 工作表中。假设过滤器dumb tasks。 我正在尝试一些东西,但它不起作用:

Dim b As Task

For Each b In ActiveProject.TaskFilters("dumb tasks")
    'code to copy to excel
Next

【问题讨论】:

  • 你能指定什么不起作用吗?你有错误吗?
  • 是的,上面写着object doesn't support this property or method
  • 所以你要复制所有满足某个Filter的任务?
  • 是的,这正是我想要做的。
  • 您需要先应用过滤器,然后循环执行任务。 或者,您是否使用某个任务的字段来使用此过滤器?比如Duration,或者Flag1

标签: vba ms-project


【解决方案1】:

如果您为过滤器使用自定义字段Flag3,则可以循环访问任务,并检查每个是否为b.Flag3 = True,然后将此任务复制到Excel。

Dim b As Task

For Each b In ActiveProject.Tasks
    If b.Flag3 = True Then
        ' here do your copy>>paste to Excel

    End If
Next

【讨论】:

  • 这就是我作为备份的想法。我会用这个。谢谢!
【解决方案2】:

要仅循环遍历应用过滤器后可见的任务,请选择所有任务并循环遍历可见任务的集合。

Sub LoopThroughFilteredTasks()

    Dim CurrentTaskUID As Long
    CurrentTaskUID = ActiveCell.Task.UniqueID

    FilterApply "dumb tasks"
    SelectAll
    Dim FilteredTasks As Tasks
    Set FilteredTasks = ActiveSelection.Tasks
    Dim tsk As Task
    For Each tsk In FilteredTasks
        ' do something
    Next tsk
    FilterApply "&All Tasks"

    Application.Find "Unique ID", "equals", CurrentTaskUID

End Sub

注意 1:虽然不是必需的,但用户通常喜欢在宏末尾恢复活动选择,因此 CurrentTaskUID 行。

注意 2:由于过滤器可能很复杂,因此最好使用实际的过滤器,而不是尝试在代码中复制它。

【讨论】:

    【解决方案3】:

    会不会是你只需要调整线

    Dim b As Task
    

    Dim b As Filter
    

    根据docsTaskFilters返回Filters的集合

    我希望这能解决问题。如果您当前的问题需要更多帮助,请提出另一个问题或编辑您当前的问题以阐明您需要帮助的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 2016-10-01
      • 1970-01-01
      • 2020-03-20
      • 2015-10-28
      • 2014-05-14
      相关资源
      最近更新 更多