You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用VB.NET通过MS Project Interop编程设置月度资源任务分配

VB.NET通过MS Project Interop按月份分配资源值解决方案

你猜的没错,按月份设置资源分配值确实依赖MS Project Interop里的TimeScaleData机制,这是处理时间分段资源分配的核心方法。直接上实操步骤和代码:


核心思路

先完成任务与资源的基础分配(拿到ResourceAssignment对象),再通过TimeScaleData方法指定目标年月的时间范围,设置对应时间段的资源工作/单位值。

具体实现步骤

  1. 基础准备:确保已创建项目、任务、资源,并完成资源到任务的分配(获取ResourceAssignment实例)。
  2. 确定目标时间范围:把指定年月转换成MS Project可识别的起始/结束日期(比如2024年5月对应#5/1/2024#到#5/31/2024#)。
  3. 调用TimeScaleData设置值:通过ResourceAssignment.TimeScaleData获取时间分段数据集合,定位到目标月份的分段后设置Value属性(比如工作时长、资源单位百分比)。

VB.NET代码示例

Imports Microsoft.Office.Interop.MSProject
Imports System.Runtime.InteropServices

Public Sub AssignResourceByMonth()
    ' 初始化MS Project应用
    Dim projApp As New Application()
    projApp.Visible = True ' 可选,可视化调试
    Dim newProj As Project = projApp.Projects.Add()

    ' 创建跨月测试任务
    Dim testTask As Task = newProj.Tasks.Add("季度开发任务")
    testTask.Start = #4/1/2024#
    testTask.Duration = "3m" ' 持续3个月

    ' 创建测试资源
    Dim testResource As Resource = newProj.Resources.Add("前端开发工程师")

    ' 完成基础资源分配
    Dim resourceAssign As ResourceAssignment = testTask.Assignments.Add(ResourceID:=testResource.ID)

    ' 设置2024年5月的资源工作值(80小时=4800分钟)
    Dim targetStartDate As Date = #5/1/2024#
    Dim targetEndDate As Date = #5/31/2024#

    ' 获取目标月份的时间刻度数据
    Dim timeScaleData As TimeScaleDataCollection = resourceAssign.TimeScaleData( _
        StartDate:=targetStartDate, _
        EndDate:=targetEndDate, _
        Type:=PjAssignmentTimescaledData.pjAssignmentTimescaledWork, _
        TimeScaleUnit:=PjTimescaleUnit.pjTimescaleMonths, _
        Count:=1 _
    )

    ' 赋值(工作值单位为分钟)
    If timeScaleData.Count > 0 Then
        timeScaleData(1).Value = 4800
    End If

    ' 保存项目
    newProj.SaveAs("C:\Temp\MonthResourceAssign.mpp")

    ' 清理COM资源,避免进程残留
    Marshal.ReleaseComObject(timeScaleData)
    Marshal.ReleaseComObject(resourceAssign)
    Marshal.ReleaseComObject(testResource)
    Marshal.ReleaseComObject(testTask)
    Marshal.ReleaseComObject(newProj)
    projApp.Quit()
    Marshal.ReleaseComObject(projApp)
End Sub

关键参数说明

  • PjAssignmentTimescaledData:指定数据类型,pjAssignmentTimescaledWork对应工作时长,pjAssignmentTimescaledUnits对应资源单位百分比(比如100表示全职)。
  • PjTimescaleUnit:指定时间刻度单位,这里用pjTimescaleMonths匹配月份维度。
  • Count:设置为1表示只获取目标月份的单个时间分段。

注意事项

  • 日期范围必须精准对应目标年月的首尾,避免跨月导致数据设置偏差。
  • 工作值的单位是分钟,小时转分钟需乘以60。
  • 操作完成后必须手动释放所有COM对象,否则MS Project进程会在后台残留。

内容的提问来源于stack exchange,提问作者dk96m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:10:49