如何通过MS项目中的循环迭代所有行和列

时间:2017-03-06 07:25:25

标签: vba ms-project microsoft-project-vba

正在处理Ms项目文件,目前在以下两个区域遇到问题

1)现在我试图通过循环遍历所有行和列 例如: -

dim var = ActiveProject.Tasks(x + 1).Name

我可以使用下面的代码

获得第一列值(任务)名称
For each oSubTasks in Activeproject.Task    
    dim var1 = oSubTasks.GetField(FieldNameToFieldConstant("Task"))    
next

但我需要遍历资源名称和起始列,我需要将所有值存储在变量

2)第二个问题是我观察到在我的MPP文件中,某些列名称就像

  1. 任务
  2. ResourcesName
  3. 开始等
  4. 但是,如果我尝试使用下面的代码存储列值

    autorefresh.js

    值类似于Text1,Text2等

    我的问题是如何从MPP文件列中获取实际显示的值

2 个答案:

答案 0 :(得分:1)

这是一个如何循环执行Ms-Project任务,并从中读取Task.NameTask.Start(到数组中)的示例。

Dim oSubTasks As Task
Dim oName(1000) As Variant
Dim oStart(1000) As Date
Dim i As Long

i = 1
For Each oSubTasks In Activeproject.Tasks
    oName(i) = oSubTasks.Name
    oStart(i) = oSubTasks.Start
    i = i + 1
Next oSubTasks

答案 1 :(得分:0)

看起来你可能正在使用vb.net而不是vba,因为你说它有效:

dim var = ActiveProject.Tasks(x + 1).Name

如果是这种情况,请务必使用Early Binding,以便在编写代码时IntelliSensemore info)。这样您就可以声明oSubTask As MSProject.Task,当您键入oSubTask后跟一段时间时,您会看到属性和方法的下拉列表。

其次,您声明要获取“实际显示的值”。对于诸如任务名称和资源名称之类的字符串字段,存储的内容与显示的内容之间没有区别。但是,对于日期字段,情况并非如此。要将任务的开始日期作为日期值,请使用:oSubTask.Start。但要获取显示日期的字符串表示形式,请使用:oSubTask.GetField(pjTaskStart)

以下是VBA示例:

Dim oSubTask As Task
Dim taskName As String
Dim taskRes As String
Dim taskStart As Date
Dim formattedStart As String

For Each oSubTask In ActiveProject.Tasks
    taskName = oSubTask.Name
    taskRes = oSubTask.ResourceNames
    taskStart = oSubTask.Start
    ' to see how the date is displayed, use GetField
    formattedStart = oSubTask.GetField(pjTaskStart)

    ' do something with these values
Next