2017-06-19 73 views
1

我正在寫一個宏,用於將MS Excel工作表中的一列數據添加到現有的MS Project文檔中。當我運行我的宏時,打開了正確的項目,但我收到一條錯誤消息,說我打開的項目已被刪除,即使它尚未被刪除。如何將列從MS Excel添加到MS Project - VBA

這裏是我當前的宏:

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 

對我做了什麼錯或是否有更好的辦法是非常讚賞的任何幫助!

+0

哪條線發生錯誤?什麼是** excact **錯誤信息?你是否嘗試給'appProj.FileOpen'的完整路徑,就像'「C:\ What \ Ever \ Your \ Path \ Is \ Project_1.mpp」'?並確保使用'aProg.'(例如'aProg.TableEditEx ...'或Excel假定在Excel的ActiveSheet中不在項目中執行此操作(也檢查複製/粘貼等) –

+1

請始終[編輯]您的問題,以便代碼可以格式化。註釋中的代碼基本上無法讀取。 –

+0

對不起,有代碼格式問題,但... 確切的錯誤消息是:「運行時錯誤」1004 ':視圖或報告無法顯示,因爲它所基於的表'Project_1.mpp'已被刪除。「我在它之前添加了aProg,並得到一條新的錯誤消息:」運行時錯誤'438':Object – Peel

回答

2

以下是您需要更新「實際持續時間」列的代碼。根據需要更改表名稱。根據需要更新範圍參考;不要包含標題單元格。

' 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