【问题标题】:How to Add Column from MS Excel to MS Project - VBA如何将列从 MS Excel 添加到 MS Project - VBA
【发布时间】:2017-11-21 21:56:43
【问题描述】:

我正在编写一个宏来将 MS Excel 工作表中的一列数据添加到已经存在的 MS Project 文档中。当我运行宏时,打开了正确的项目,但我收到一条错误消息,指出我打开的项目已被删除,即使它没有被删除。

这是我当前的宏:

Sub newProjectColumn()
Dim appProj As MSProject.Application
Dim aProg As MSProject.Project
Dim wb As Workbook
Dim ws As Worksheet
Dim rng As Range
Set wb = ActiveWorkbook

'~~> Open MS Project
Set ws = wb.Sheets("Sheet1")

Set appProj = CreateObject("Msproject.Application")

appProj.FileOpen "Project_1.mpp"

Set aProg = appProj.ActiveProject

appProj.Visible = True

'~~> Next, create new Column in project
TableEditEx Name:="Project_1.mpp", TaskTable:=True, _
    NewFieldName:="Actual Duration", Title:="Actual Duration", Width:=12, _
    ShowInMenu:=True, _
    ColumnPosition:=29

'~~> Next, copy T:T from Excel.Then, paste to 29th column (i,29) in Project.
Set Rng = ws.Range("T:T")
ActiveSheet.Paste Destination:=Rng
SelectTaskColumn Column:="Actual Duration"

End Sub

如果我做错了什么或有更好的方法,任何帮助将不胜感激!

【问题讨论】:

  • 错误出现在哪一行? excact 错误信息是什么?您是否尝试为appProj.FileOpen 提供完整路径,例如"C:\What\Ever\Your\Path\Is\Project_1.mpp"?并确保在您的项目中应该发生的所有事情都使用 aProg. 前缀(例如aProg.TableEditEx … 或 Excel 假定在 Excel 的 ActiveSheet 中而不是在项目中(还要检查复制/粘贴等)。
  • 请始终edit您的问题,以便可以格式化代码。 cmets 中的代码大多不可读。
  • 抱歉,代码有格式问题,但是...确切的错误消息是:“运行时错误'1004':视图或报告无法显示,因为表'Project_1.mpp'它所依据的已被删除。”我在它之前添加了 aProg 并收到一条新的错误消息:“运行时错误'438':对象不支持此属性或方法。
  • 两个错误都出现在表格编辑行
  • 我不好,但 TableEditEx 应该是 appProj.TableEditEx,因为 Application.TableEditEx Method (Project)

标签: excel vba ms-project


【解决方案1】:

这里是更新实际持续时间列所需的代码。根据需要更改表名。根据需要更新范围参考;不包括标题单元格。

  ' add Actual Duration as the first column & apply the table changes
  appProj.TableEditEx Name:="Entry", TaskTable:=True, _
    NewFieldName:="Actual Duration", Title:="Actual Duration", Width:=12, ColumnPosition:=0
  appProj.TableApply "Entry"

  ' copy updated values from Excel (no headers) and paste in new column in Project
  Range("T2:T100").Copy
  appProj.SelectColumn 2
  appProj.EditPaste

  ' delete the column
  appProj.ColumnDelete

请注意,使用TableEditEx 方法添加列时,索引从0 开始,而使用SelectColumn 方法选择列时,索引从2 开始。

TableEditEx method

SelectColumn method

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 2015-03-20
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 2017-10-26
    相关资源
    最近更新 更多