MS 项目 VBA:如何获取一天或两个日期之间作业的工作时间?

问题描述 投票:0回答:1

我正在尝试读取/获取每天或在 vba 上的两个日期之间的作业所需的工作时间。

具体说明我正在尝试做的事情: 我创建了一个从 2024 年 3 月 11 日开始的任务,需要 16 小时的工作,并分配给名为 DD 的资源

我想了解该作业在特定日期或日期范围内消耗了 DD 工作时间的多少工作时间。

(<=>我想在vba中读取/获取下面所示的资源使用表上绿色的工作时间)

我尝试使用 TimeScaleData 方法提取该数据,但似乎您只能输入数据,而不能从中读取数据。

我现在只需要正确的方法/命令来提取该数据。

我预先感谢您提供的任何帮助。

For Each tsk In ActiveProject.Tasks
    
    Dim asn As Assignment
    For Each asn In tsk.Assignments
        If asn.Resource.Name = "DD" Then
            
            'Dim tsv As TimeScaleValues
            'Set tsv = asn.TimeScaleData(StartDate:=#3/1/2024#, EndDate:=#3/7/2024# _
            '    , Type:=pjAssignmentTimescaledActualWork, TimeScaleUnit:=pjTimescaleDays)
            
            testasn = asn.TimeScaleData(StartDate:=#3/1/2024#, EndDate:=#3/7/2024#)
            
            'test1 = tsv(1).Value
            'test2 = tsv(2).Value
                            
        End If
    Next asn
Next tsk
vba ms-project
1个回答
0
投票

找到了。

下面的宏将在变量 TestFeedback 中返回带有以下内容的文本:

  • 任务名称
  • “S”+ 审核期间的开始日期
  • “F”+ 所审查期间的结束日期
  • “W”+审查期间的工作时间

只需在其上放置一个断点即可检查它在循环过程中如何演变。

可以在这里找到一些非常有用的信息: 时间阶段性数据MS项目

那里有一些关于如何读取每个资源的小时数的信息。

注意:链接页面提到uniqueID应该在表达式的XXX中输入 设置 tsvs = ActiveProject.Tasks(XXXX).TimeScaleData([...])

但是,当我测试宏时,这不起作用。 它仅适用于任务 ID。

Sub TimePhasedDataTest()
Dim tsv As TimeScaleValue
Dim tsvs As TimeScaleValues

TestStart = #3/9/2024#
TestFinish = #3/19/2024#
Set t = ActiveCell.Task
   'Timephased for Task with ID 6
   Set tsvs = ActiveProject.Tasks(6).TimeScaleData( _
      StartDate:=TestStart, _
      EndDate:=TestFinish, _
      Type:=pjTaskTimescaledWork, _
      TimeScaleUnit:=pjTimescaleDays, Count:=1)
   For Each tsv In tsvs
        'Debug.Print "Start: " & Format(tsv.StartDate, _
            '"Long Date"), "Work: " & Val(tsv.Value) / 60 & "h"
        TestFeedback = tsv.Parent.Name & _
            " S: " & tsv.StartDate & " " & _
            "F: " & tsv.EndDate & " " & _
            "W: " & Val(tsv.Value) / 60 & "h"
   Next tsv

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.