如何通过 MS 项目中的循环迭代所有行和列
How to iterate all rows and columns through a loop in MS project
我正在处理 Ms 项目文件,目前在以下两个方面遇到问题
1) 现在正在尝试通过循环迭代所有行和列
例如:-
Task ResourcesName Start
products xxxx 10/3/2017
projects yyyy 11/04/2017
我可以使用以下代码获取第一列值(任务)名称
dim var = ActiveProject.Tasks(x + 1).Name
但我需要遍历到资源名称和开始列,我需要将所有值存储在变量中
2) 第二个问题是我观察到在我的 MPP 文件中某些列的名称类似于
- 任务
- 资源名称
- 开始等
但是,如果我尝试使用以下代码存储列值
For each oSubTasks in Activeproject.Task
dim var1 = oSubTasks.GetField(FieldNameToFieldConstant("Task"))
next
值类似于 Text1、Text2 等
我的问题是如何从 MPP 文件列中获取实际显示的值
这是一个示例,说明如何遍历您的 Ms-Project 任务,并从中读取 Task.Name
和 Task.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
看来您使用的可能是 vb.net 而不是 vba 因为您说这是可行的:
dim var = ActiveProject.Tasks(x + 1).Name
如果是这种情况,请确保在编写代码时使用 Early Binding so you have IntelliSense (more info)。这样你就可以声明 oSubTask As MSProject.Task
,当你键入 oSubTask
后跟一个句点时,你会得到一个属性和方法的下拉列表。
其次,您声明要获得 "actual displayed values"。对于任务名称和资源名称等字符串字段,存储的内容和显示的内容没有区别。但是,对于日期字段,情况并非如此。要获取任务的开始日期作为日期值,请使用: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
我正在处理 Ms 项目文件,目前在以下两个方面遇到问题
1) 现在正在尝试通过循环迭代所有行和列 例如:-
Task ResourcesName Start
products xxxx 10/3/2017
projects yyyy 11/04/2017
我可以使用以下代码获取第一列值(任务)名称
dim var = ActiveProject.Tasks(x + 1).Name
但我需要遍历到资源名称和开始列,我需要将所有值存储在变量中
2) 第二个问题是我观察到在我的 MPP 文件中某些列的名称类似于
- 任务
- 资源名称
- 开始等
但是,如果我尝试使用以下代码存储列值
For each oSubTasks in Activeproject.Task
dim var1 = oSubTasks.GetField(FieldNameToFieldConstant("Task"))
next
值类似于 Text1、Text2 等
我的问题是如何从 MPP 文件列中获取实际显示的值
这是一个示例,说明如何遍历您的 Ms-Project 任务,并从中读取 Task.Name
和 Task.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
看来您使用的可能是 vb.net 而不是 vba 因为您说这是可行的:
dim var = ActiveProject.Tasks(x + 1).Name
如果是这种情况,请确保在编写代码时使用 Early Binding so you have IntelliSense (more info)。这样你就可以声明 oSubTask As MSProject.Task
,当你键入 oSubTask
后跟一个句点时,你会得到一个属性和方法的下拉列表。
其次,您声明要获得 "actual displayed values"。对于任务名称和资源名称等字符串字段,存储的内容和显示的内容没有区别。但是,对于日期字段,情况并非如此。要获取任务的开始日期作为日期值,请使用: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