【问题标题】:VBA - Import Excel data to MS ProjectVBA - 将 Excel 数据导入 MS Project
【发布时间】:2021-07-23 23:30:47
【问题描述】:

我正在尝试从 Excel 中获取数据表并将其导入 MS Project

这是我在 Excel 中的截图:

CC:列标题的 Excel 表格:WBS、任务名称、开始日期、完成日期、工期、工时和资源名称,其中包含独立于资源名称分配的数据行。

这是我正在寻找能够从 Excel 生成到 MS Project 的 VBA 代码的屏幕截图:

CC:MS 项目文件显示 WBS、任务名称、开始日期、完成日期、持续时间、工作和资源名称列,其中资源名称按 WBS 分组。

我尝试过复制和粘贴,但 VBA 必须有更好的选择(我希望?)

如果有问题,我很乐意回答。

非常感谢任何人能给我的帮助!

编辑: 这是我现在拥有的 VBA:

Sub ExceltoProject()
Dim pjapp As Object
Dim strValue, strStartDate, strEndDate, Strresource As String
Dim newproj
Set pjapp = CreateObject("MSProject.Application")
If pjapp Is Nothing Then
MsgBox "Project is not installed"
Exit Sub
End If
pjapp.Visible = True

Set newproj = pjapp.Projects.Add
newproj.Title = "ExcelExtract"
Set ActiveProject = newproj
For i = 2 To 4

strWBS = Worksheets("LABOR_IMS_INPUT").Range("A" & i)
strTaskName = Worksheets("LABOR_IMS_INPUT").Range("B" & i)
strStartDate = Worksheets("LABOR_IMS_INPUT").Range("C" & i)
strEndDate = Worksheets("LABOR_IMS_INPUT").Range("D" & i)
strDuration = Worksheets("LABOR_IMS_INPUT").Range("E" & i)
Strresource = Worksheets("LABOR_IMS_INPUT").Range("F" & i)
strWork = Worksheets("LABOR_IMS_INPUT").Range("G" & i)

newproj.Tasks.Add (strValue & " " & Strresource)
newproj.Resources.Add.Name = Strresource
newproj.Tasks(i - 1).ResourceNames = Strresource
Next i
End Sub

Public Function ExistsInCollection(pColl, ByVal pKey As String) As Boolean
On Error GoTo NoSuchKey
If VarType(pColl.Item(pKey)) = vbObject Then
' force an error condition if key does not exist
End If
ExistsInCollection = True
Exit Function

NoSuchKey:
ExistsInCollection = False
End Function

但这就是我得到的:

CC: Excel file and MS Project file. MS Project file only has "resource sheet name" data.

任何想法正在发生的事情。是我做错了吗?

抱歉之前的问题清晰,我有视力障碍,正在尝试编码!

【问题讨论】:

  • 如果您真正需要做的只是将 Excel 中的数据获取到 Project 中,只要在 Excel 中合并行,复制粘贴就可以很好地工作,这样每个任务只有一行(例如,合并资源)。它可以用 VBA 完成,从 Excel 自动化项目,反之亦然。
  • rachel,感谢您的评论,我有一些东西要从项目中获取数据到 excel,我只是在努力开发 VBA,它将从 excel 中获取数据并将其放入项目中。
  • 展示你拥有的东西,并就你的代码在哪里不工作提出具体问题。这就是 stackoverflow 的意义所在——在特定问题上获得帮助。这并不是一个真正的为我编写整个程序的网站。查看How do I ask a good question
  • 嘿瑞秋,谢谢你的评论。真的有帮助,诚实。我是新来的,所以如果我生锈了,我很抱歉。我已经编辑了上面的内容,希望能更好地解释这一点。让我知道它是否是您正在寻找的东西

标签: excel vba ms-project


【解决方案1】:

此代码将从 Excel 工作表中获取数据以创建新的项目计划。无需同时设置 Finish 和 Duration 字段,因为 Finish 日期将由 Start date 和 Duration 决定。

Sub ExceltoProject()
Dim pjapp As Object
Dim newproj As Object

Set pjapp = CreateObject("MSProject.Application")
If pjapp Is Nothing Then
    MsgBox "Project is not installed"
    Exit Sub
End If
pjapp.Visible = True

Set newproj = pjapp.Projects.Add
newproj.Title = "ExcelExtract"

Dim wst As Worksheet
Set wst = ThisWorkbook.Worksheets("LABOR_IMS_INPUT")

Dim i As Long
For i = 2 To 4
    newproj.Tasks.Add
    newproj.Tasks(i - 1).Name = wst.Cells(i, 2)
    newproj.Tasks(i - 1).WBS = wst.Cells(i, 1)
    newproj.Tasks(i - 1).Start = CDate(wst.Cells(i, 3))
    newproj.Tasks(i - 1).Duration = wst.Cells(i, 5) & "d"
    newproj.Tasks(i - 1).ResourceNames = wst.Cells(i, 7)
    newproj.Tasks(i - 1).Work = wst.Cells(i, 6) & "h"
Next i

End Sub

【讨论】:

  • 对不起,我为上面的输入太早了。我很抱歉。嗨,瑞秋。非常感谢你做的这些。我收到“运行时错误'1101',当我运行调试时它突出显示:“newproj.Tasks(i - 1).Start = CDate(wst.Cells(i, 3))”我正在尝试看看它在哪里提取并排除解决方案。只是为了给你一个更新。
猜你喜欢
  • 2022-11-18
  • 1970-01-01
  • 2016-08-16
  • 2022-07-08
  • 2017-11-21
  • 2015-12-20
  • 2018-12-22
  • 2022-07-17
  • 2020-10-09
相关资源
最近更新 更多