【问题标题】:Start Date from excel to ms project (with VBA)从 excel 到 ms 项目的开始日期(使用 VBA)
【发布时间】:2018-04-19 01:25:55
【问题描述】:

我正在尝试使用 VBA 将项目数据从 MS Excel 传输到 MS Project。

问题在于,正如我现在所做的那样,每个任务的开始时间都设置为 12:00 AM,这给我评估 EndDate 带来了问题(假设我使用 StartDate 和 Duration每个活动)。

Dim StartDate As Date

For j = 1 To 10000
    StartDate = wbAs.Worksheets(i).Cells(j, 2).Value
    prProject.Tasks(i).Start = StartDate
    i = i + 1

由于代码有点长,我没有复制整个代码,希望可以理解。 基本上,我在 Excel 工作表的每一行上循环,然后在 MS Project 中传输每个活动的开始日期,显示在第二列中。

这样做,我无法通过 StartHour,但我想告诉 MS Project 所有活动都在上午 09:00 开始。 这可能吗?

谢谢

【问题讨论】:

    标签: excel vba ms-project


    【解决方案1】:

    快速解答

    将缺失的小时部分添加到仅日期值中,以在 Project 中获得正确的开始日期和时间

    prProject.Tasks(i).Start = StartDate + prProject.DefaultStartTime
    

    长答案

    日期总是有一个时间部分,但如果没有明确设置它是 12:00 AM。日期实际上是数字,整数部分表示日期,小数部分表示时间。在 VBA 中,今天的日期是 43208(例如,如果您从 1900 年 1 月 1 日开始,则 2018 年 4 月 18 日是第 43,208 天)。

    您要输入的值是 Excel 中的日期 + 上午 9:00,即 9 ÷ 24。

    虽然您可以添加 9 ÷ 24,但您应该使用日程表中设置的默认开始时间。如果默认开始时间发生变化(或在您可能运行此宏的另一个计划中有所不同),使用该值将使您不必更新代码。

    【讨论】:

      【解决方案2】:

      为什么不在设置项目开始前将时间设置为上午 9:00?这应该会有所帮助:How to set only the time part of a datetime

      Dim StartDate As Date
      
      StartDate = wbAs.Worksheets(i).Cells(j, 2).Value
      Dim ProjDate As DateTime = New DateTime(StartDate.Year, StartDate.Month, StartDate.Day,9,0,0,0)
      prProject.Tasks(i).Start = ProjDate
      

      【讨论】:

      • 好的,谢谢,我明白你的意思,但是如果我尝试你的建议(第 4 行),它会给我错误(“预期:语句结束”)。我将该行分成两部分,“Dim ProjDate As DateTime”和“ProjDate = DateTime(StartDate.Year, StartDate.Month, StartDate.Day, 9, 0, 0, 0)”,但它告诉我“不支持自动化类型在 Visual Basic 中”。我用的是Excel 2010,不知道是不是这个问题。
      • 见下面瑞秋的回答;她在这方面比我好。
      猜你喜欢
      • 2021-08-04
      • 2018-04-12
      • 2018-07-03
      • 2015-03-20
      • 1970-01-01
      • 2015-08-18
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多