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

寻求Excel数据到MS Project的通用迁移方法,现有宏需手动赋值

通用方案:从Excel导入实际工时到MS Project

核心思路

通过读取Excel中的结构化数据(包含资源UID、日期、实际工时),动态匹配MS Project中的任务分配项和日期,自动填充工时,无需手动编写每个时间刻度值的赋值代码。

前提准备

  • Excel文件需包含至少三列:资源UID、日期、实际工时,示例结构如下:
    资源UID日期实际工时
    20971542025/2/47
    20971542025/2/58
    20971542025/2/612
    .........
  • 确保Excel文件处于打开状态,或在代码中指定文件路径。

通用VBA代码实现

Sub ImportActualHoursFromExcel()
    Dim xlApp As Object
    Dim xlWB As Object
    Dim xlWS As Object
    Dim lastRow As Long
    Dim i As Long
    Dim resUID As Long
    Dim targetDate As Date
    Dim actualWork As Double
    Dim asn As Assignment
    Dim tsv As TimeScaleValues
    Dim tsvItem As TimeScaleValue
    
    ' 连接到已打开的Excel文件(若未打开,可改为指定路径打开)
    Set xlApp = GetObject(, "Excel.Application")
    Set xlWB = xlApp.Workbooks("工时数据.xlsx") ' 替换为你的Excel文件名
    Set xlWS = xlWB.Worksheets("Sheet1") ' 替换为你的工作表名
    
    lastRow = xlWS.Cells(xlWS.Rows.Count, "A").End(-4162).Row ' -4162对应xlUp
    
    ' 遍历Excel中的每一行数据
    For i = 2 To lastRow ' 假设第一行是表头,从第二行开始读取
        resUID = xlWS.Cells(i, "A").Value
        targetDate = xlWS.Cells(i, "B").Value
        actualWork = xlWS.Cells(i, "C").Value
        
        ' 查找对应资源的任务分配项
        For Each asn In ActiveProject.Tasks
            If asn.UniqueID = resUID Then
                ' 获取该分配项对应日期的时间刻度数据
                Set tsv = asn.TimeScaleData(StartDate:=targetDate, EndDate:=targetDate, _
                    Type:=pjAssignmentTimescaledActualWork, TimeScaleUnit:=pjTimescaleDays)
                
                ' 匹配日期并赋值
                For Each tsvItem In tsv
                    If tsvItem.StartDate = targetDate Then
                        tsvItem.Value = actualWork * 60 ' MS Project中工时单位为分钟,需转换(1小时=60分钟)
                        Exit For
                    End If
                Next tsvItem
                Exit For
            End If
        Next asn
    Next i
    
    ' 释放对象
    Set xlWS = Nothing
    Set xlWB = Nothing
    Set xlApp = Nothing
    
    MsgBox "工时导入完成", vbInformation
End Sub

代码说明

  • 批量数据读取:从Excel表格中批量获取资源标识、目标日期和工时数据,彻底替代手动硬编码的方式。
  • 精准日期匹配:通过日期直接定位时间刻度项,避免因周末、节假日导致的索引偏移问题,比原代码的索引赋值更可靠。
  • 单位转换处理:MS Project实际工时以分钟为存储单位,自动将Excel中的小时数转换为分钟赋值。
  • 可扩展性:只需更新Excel中的数据表格,无需修改VBA代码即可完成工时更新,适配不同周期和资源的需求。

注意事项

  • 确保MS Project和Excel的宏安全性设置允许运行宏。
  • Excel中的日期格式需与MS Project一致,避免日期匹配失败。
  • 若同一资源UID对应多个任务分配项,可添加任务名称/UID的匹配条件,进一步精准定位目标任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:03:22