MSProject中VBA能否对非大纲代码自定义字段查找表执行更多操作?
Microsoft Project非大纲代码自定义字段查找表的VBA操作方案
对于非大纲代码类型的自定义字段(比如任务自定义数字字段pjCustomTaskNumber1),Project的VBA对象模型没有直接提供编辑或删除单个查找表条目的方法:LookUpTableAddEx仅能新增条目,无法覆盖已有同名Code的条目,也没有对应的编辑/删除单条方法。
变通方案:清空查找表后重新填充
要更新这类字段的查找表,只能先清空全部条目,再重新添加包含更新内容的所有条目,具体实现如下:
1. 清空指定字段的查找表
通过循环从最后一个条目开始删除,避免索引错乱:
Sub ClearNonOutlineLookupTable() Dim targetField As PjField targetField = pjCustomTaskNumber1 ' 替换为你需要操作的字段ID With Application.LookupTables(targetField) Do While .Count > 0 .Remove .Count ' 从最后一条开始删除 Loop End With End Sub
2. 重新填充更新后的查找表
先调用清空函数,再添加所有需要的条目(包括未修改的条目):
Sub UpdateLookupTable() ' 先清空旧查找表 ClearNonOutlineLookupTable ' 添加更新后的条目 Application.LookUpTableAddEx FieldID:=pjCustomTaskNumber1, Level:=1, Code:="10", Description:="no wow" Application.LookUpTableAddEx FieldID:=pjCustomTaskNumber1, Level:=1, Code:="20", Description:="常规任务" ' 可继续添加其他需要的条目 End Sub
注意事项
- 该方法会清空整个查找表,执行前需确保已整理好所有需要保留的条目,避免数据丢失;
- 建议在测试项目文件中先验证代码,再应用到正式项目;
- 大纲代码字段的查找表支持直接编辑单条条目,但非大纲代码字段仅能使用此清空重填的方式。
内容的提问来源于stack exchange,提问作者Stephen Richards
相关产品推荐
相关产品推荐

