VBA - 从Excel向MS项目添加任务

时间:2015-01-21 13:26:33

标签: excel vba excel-vba ms-project

我目前正在使用VBA从Excel工作表中打开MS-Project中的项目。我还在添加任务,日期,持续时间和更多数据。

我的问题是,当我添加新任务时,任务的默认开始时间不是在项目中定义的(早上7:00)而是00:00。 这是我正在使用的代码:

'Collect data
strValue = Worksheets("Display").Range("B" & i)
strStartDate = Worksheets("Display").Range("G" & i)
strEndDate = Worksheets("Display").Range("G" & i)
Strresource = Worksheets("Display").Range("C" & i)
DurTim = CDec(Worksheets("Display").Range("E" & i))
ActDurTim = CDec(Worksheets("Display").Range("F" & i))

'Define project defaults
newproj.DefaultStartTime = "7:00"
newproj.DefaultFinishTime = "16:00"
newproj.HoursPerDay = "7"

'Enter data to task
newproj.Tasks.Add (strValue)
'Check for milestone
If Worksheets("Display").Range("H" & i) = "Y" Then
    newproj.Tasks(i - 6).Milestone = False
End If
newproj.Tasks(i - 6).Start = strStartDate
newproj.Tasks(i - 6).Duration = DurTim & " hours"
newproj.Tasks(i - 6).ActualDuration = ActDurTim & "hours"
If i <> 7 Then
    newproj.Tasks(i - 6).Predecessors = newproj.Tasks(i - 6 - 1)
End If
If Not ExistsInCollection(newproj.Resources, Strresource) Then _
newproj.Resources.Add.Name = Strresource
newproj.Tasks(i - 6).ResourceNames = Strresource

我试图查看任务的Ms-Project对象和项目本身的解决方案,但没有运气。 任何帮助都会很感激。

1 个答案:

答案 0 :(得分:0)

当您通过代码设置任务的“开始”属性时,您实际上正在设置“约束日期”和“约束类型”以驱动计算的“开始”字段。并且提供的日期有明确的时间部分(例如2015年1月26日下午3:25)或隐含地(例如2015年1月26日上午12:00)。

另一方面,如果您在用户界面中键入开始日期而您没有提供时间组件,则默认开始时间会添加到日期以创建约束日期。

您在任务的“开始”字段中实际看到的内容取决于Microsoft Project用于计算日期的这些因素:约束,前置任务/后续任务和日历(项目,任务和资源)。

根据您的报告,您的项目日历显示为7d24h或类似日历,工作时间从午夜开始。因此,当您通过代码设置开始日期时,会在午夜开始时添加约束日期,并且由于项目日历将其作为工作时间,因此任务从午夜开始。

如果要模拟设置开始日期的用户界面方法,请使用SetField方法:

newproj.Tasks(i - 6).SetField pjTaskStart, strStartDate