如何在MS Project中使用VBA实现多条件任务过滤?
问题:MS Project VBA实现多条件任务筛选
现有一段可实现单条件过滤的MS Project VBA代码,运行正常:
FilterEdit Name:="temp", TaskFilter:=True, Create:=True, OverwriteExisting:=True, FieldName:="Resource Names", Test:="contains", Value:="Electician", ShowInMenu:=False, ShowSummaryTasks:=False
需要筛选出同时满足「资源名称包含Electician」且「大纲级别大于2」的任务,但直接拼接多个参数的方式未成功,尝试的错误代码如下:
FilterEdit Name:="temp", TaskFilter:=True, Create:=True, OverwriteExisting:=True, FieldName:="Resource Names", Test:="contains", Value:="Electician", Operation:="And", FieldName:="Outline Level", Test:="is less than or equal to", Value:=2, ShowInMenu:=False, ShowSummaryTasks:=False
微软官方文档提到FilterEdit方法的Operation参数,但未提供使用示例,需指导如何正确用VBA实现该多条件任务筛选。
解决方案
MS Project的FilterEdit方法无法在单次调用中直接传入多个条件参数,需要分多次调用:
- 第一次调用创建筛选并添加第一个条件;
- 后续调用通过
Operation参数指定逻辑关系(And/Or),并添加额外条件,同时避免重复设置Create和OverwriteExisting参数。
针对你的需求,正确的VBA代码如下:
' 创建并设置第一个筛选条件:资源名称包含Electician FilterEdit Name:="temp", TaskFilter:=True, Create:=True, OverwriteExisting:=True, _ FieldName:="Resource Names", Test:="contains", Value:="Electician", _ ShowInMenu:=False, ShowSummaryTasks:=False ' 添加第二个筛选条件:大纲级别大于2,与第一个条件逻辑关系为And FilterEdit Name:="temp", TaskFilter:=True, _ FieldName:="Outline Level", Test:="is greater than", Value:=2, _ Operation:="And"
代码说明:
- 第一次调用
FilterEdit时,通过Create:=True和OverwriteExisting:=True创建名为temp的任务筛选,并设置第一个条件; - 第二次调用时,指定同一个筛选名称
temp,不设置Create和OverwriteExisting(默认保留现有筛选),通过Operation:="And"指定与上一个条件的逻辑关系,然后添加第二个条件「大纲级别大于2」; - 注意你之前的错误代码中第二个条件写的是「is less than or equal to」,和需求的「大于2」不符,已修正为
"is greater than"。
内容的提问来源于stack exchange,提问作者Erik T. Wiik
相关产品推荐
相关产品推荐

