如何在MS Project中查找指定UID并解决对应宏代码运行失效问题
原宏故障原因
- 冗余前置代码:开头给项目摘要任务Number10字段赋值的代码无实际作用,且未做选中任务校验,空选状态下运行会直接报错
- 变量类型错误:
UID和Temp_UID声明为Integer类型,而MS Project的UniqueID实际为长整型,项目任务量超过32767时会触发溢出错误 - 未处理空任务:遍历Tasks集合时未判断任务是否为Nothing,遇到无效占位任务会直接崩溃
- 初始值逻辑错误:ID初始值设为1,若要查找的UID恰好对应ID为1的任务,会误判为未找到
- 筛选逻辑混乱:重复开启自动筛选,未先展开所有任务就遍历,可能导致行号匹配错误
修复后可用的宏代码
Sub FindUID() Dim T As Task Dim Temp_UID As Long Dim UID As Long Dim ID As Long ' 获取用户输入的UID UID = InputBox("请输入需要查找的UID", "查找UID") ' 初始ID设为0,避免和实际ID为1的任务冲突 ID = 0 ' 先关闭筛选、展开所有任务,避免行号匹配错误 ActiveProject.AutoFilter = False OutlineShowAllTasks ' 遍历所有任务 For Each T In ActiveProject.Tasks ' 跳过无效空任务 If Not T Is Nothing Then Temp_UID = T.UniqueID If Temp_UID = UID Then ID = T.ID ' 找到后直接退出循环,不用继续遍历 Exit For End If End If Next T If ID > 0 Then ' 选中匹配的任务行 SelectRow Row:=ID, RowRelative:=False Else MsgBox "未找到对应UID的任务", vbOKOnly, "提示" End If End Sub
使用说明
- 打开MS Project文件后,按
Alt+F11打开VBA编辑器,插入模块,把上述代码粘贴进去 - 按
F5运行宏,在弹窗中输入要查找的UID即可自动定位到对应任务行
内容的提问来源于stack exchange,提问作者Yessenia
相关产品推荐
相关产品推荐

