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