如何将列从 MS Excel 添加到 MS Project - VBA
How to Add Column from MS Excel to MS Project - VBA
我正在编写一个宏,将 MS Excel sheet 中的一列数据添加到现有的 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
任何关于我做错了什么的帮助,或者如果有更好的方法,将不胜感激!
这是更新“实际持续时间”列所需的代码。根据需要更改 table 名称。根据需要更新范围参考;不包括 header 单元格。
' 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 开始。
我正在编写一个宏,将 MS Excel sheet 中的一列数据添加到现有的 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
任何关于我做错了什么的帮助,或者如果有更好的方法,将不胜感激!
这是更新“实际持续时间”列所需的代码。根据需要更改 table 名称。根据需要更新范围参考;不包括 header 单元格。
' 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 开始。