如何用VBA无循环读取MS Project任务范围的指定属性?
MS Project VBA 批量读取任务属性(无需遍历所有任务)
MS Project VBA没有像Excel那样直接用单语句将任务属性列一次性读取到数组的原生语法(你写的datStart=activeproject.tasks.start.value这种写法是无效的),但可以通过两种高效方式实现类似需求,避免手动遍历整个项目的任务:
方法一:利用剪贴板批量导出(无显式循环)
通过选中目标任务范围的对应属性列,复制到剪贴板后直接导入数组,代码无需写循环:
Dim datStart() As Variant ' 选中目标任务范围(示例:ID 1到10的任务) ActiveProject.SelectRow Row:=1, RowRelative:=False ActiveProject.SelectRow Row:=10, RowRelative:=True ' 选中"开始时间"列 Application.SelectTaskColumn Column:="Start" ' 复制到剪贴板 Application.Copy ' 将剪贴板文本转成数组 datStart = Application.WorksheetFunction.Transpose(CreateObject("HTMLFile").ParentWindow.ClipboardData.GetData("Text"))
这种方式适合快速批量获取数据,缺点是依赖剪贴板,若有其他程序占用剪贴板可能影响结果。
方法二:针对筛选后的任务范围赋值(仅遍历目标任务)
先定义目标任务范围,再仅遍历该范围的任务赋值,相比遍历整个项目效率高很多:
Dim datStart() As Date Dim taskRange As Tasks ' 定义目标任务范围(示例:ID 1到10的任务) Set taskRange = ActiveProject.Tasks.Range("1-10") ' 初始化数组 ReDim datStart(1 To taskRange.Count) ' 仅遍历目标任务范围赋值 For i = 1 To taskRange.Count datStart(i) = taskRange(i).Start Next i
注:这里的循环仅针对你指定的任务范围,而非所有任务,完全符合你“无需遍历项目所有任务”的要求。
内容的提问来源于stack exchange,提问作者farmerandy
相关产品推荐
相关产品推荐

