宏使用VBA Microsoft project 2010一次遍历一个字段过滤器

宏使用VBA Microsoft project 2010一次遍历一个字段过滤器,vba,ms-office,ms-project,Vba,Ms Office,Ms Project,基本上正如标题所示,我正试图遍历一个名为“Text3”的自定义字段,该字段与“任务所有者”关联,下拉列表一次筛选一个资源。这方面我是新手,所以请容忍我 这是我的密码: 我遇到的问题是,它没有为特定资源设置过滤器,只是将其留空。如果我将标准命名为“johnsmith”,它是有效的,但是我尝试使用可变名称作为字符串来迭代所有资源 任何帮助都将不胜感激。 谢谢 根据您的注释,此代码将构建一个存储在Text3字段中的唯一名称列表,然后循环它们以创建XPS报告 Sub CreateXpsReports(

基本上正如标题所示,我正试图遍历一个名为“Text3”的自定义字段,该字段与“任务所有者”关联,下拉列表一次筛选一个资源。这方面我是新手,所以请容忍我

这是我的密码:


我遇到的问题是,它没有为特定资源设置过滤器,只是将其留空。如果我将标准命名为“johnsmith”,它是有效的,但是我尝试使用可变名称作为字符串来迭代所有资源

任何帮助都将不胜感激。
谢谢

根据您的注释,此代码将构建一个存储在Text3字段中的唯一名称列表,然后循环它们以创建XPS报告

Sub CreateXpsReports()

    ' build unique list of names store in Text3
    On Error Resume Next
    Dim Names As New Collection
    Dim tsk As Task
    For Each tsk In ActiveProject.Tasks
        Names.Add tsk.Text3, tsk.Text3
    Next tsk

    On Error GoTo 0

    'apply the gantt view first
    ViewApply name:="gantt chart"
    'expand all tasks
    OutlineShowAllTasks
    'apply the late task filter
    FilterApply name:="Late Tasks"

    Dim name As Variant
    For Each name In Names
        'This was the only line I was missing for the code to work.
        On Error Resume Next           

        'apply filter to task owner as the resource
        'checks to see if filter is set on the application first
        If Not ActiveProject.AutoFilter Then
            Application.AutoFilter
        End If

        Application.SetAutoFilter FieldName:="Text3", _
                    FilterType:=pjAutoFilterCustom, _
                    Test1:="contains", Criteria1:=name

        'export to xps with the resources' name
        DocumentExport FileName:=name, FileType:=pjXPS

    Next name

End Sub

您确定Text3中的值与资源名称完全匹配吗?我试过你的代码,它对我很有效。例如,我创建了一个名为“Rachel”的资源,并将该值放在一些后期任务的Text3字段中,过滤器工作得很好。我刚刚检查了一下,您是对的,名称不完全匹配……那么我如何迭代过滤列表呢?是否存在一个数组,其中存储了该筛选列表的所有值?感谢您的努力,但筛选结果仍然是空的。这可能是我文本的布局吗?我不知道你说的“布局”是什么意思。您是否尝试过使用F8单步执行代码?确保名字和你期望的一样。是的,我试过了,还是没用。如果它没有挂在过滤器上,它会挂在XPS部件上。谢谢你的帮助@JonathanValencia注意,我省略了错误恢复下一步的
,并使用
错误转到0
来匹配没有错误处理的原始代码。不过,很高兴听到代码现在正在为您进行编辑。(FWIW:您可以删除
On Error GoTo 0
,然后删除后续
On Error Resume Next
,以获得相同的结果。)
Sub CreateXpsReports()

    ' build unique list of names store in Text3
    On Error Resume Next
    Dim Names As New Collection
    Dim tsk As Task
    For Each tsk In ActiveProject.Tasks
        Names.Add tsk.Text3, tsk.Text3
    Next tsk

    On Error GoTo 0

    'apply the gantt view first
    ViewApply name:="gantt chart"
    'expand all tasks
    OutlineShowAllTasks
    'apply the late task filter
    FilterApply name:="Late Tasks"

    Dim name As Variant
    For Each name In Names
        'This was the only line I was missing for the code to work.
        On Error Resume Next           

        'apply filter to task owner as the resource
        'checks to see if filter is set on the application first
        If Not ActiveProject.AutoFilter Then
            Application.AutoFilter
        End If

        Application.SetAutoFilter FieldName:="Text3", _
                    FilterType:=pjAutoFilterCustom, _
                    Test1:="contains", Criteria1:=name

        'export to xps with the resources' name
        DocumentExport FileName:=name, FileType:=pjXPS

    Next name

End Sub