2017-10-07 78 views
0

我很新的VBA。我正在嘗試開發一個宏來讀取Excel文件並將數據填充到項目文件中。 Excel文件大約有800行。我正在調試代碼。在填充項目文件時,在For循環中,多次執行循環後,出現「運行時錯誤'1101':參數值無效。」 你能幫我理解這個問題嗎?請在代碼下方找到。 問候 科亞運行時錯誤1101,同時填充項目文件

Sub upload_excel_to_mpp() 

'Declaration 
Dim wbBook As Workbook 
Dim wsSheet As Worksheet 
Dim vaWorkorder As Variant 
Dim vaTaskname As Variant 
Dim vaHours As Variant 
Dim vaArea As Variant 
Dim vaSkill As Variant 
Dim vaStatus As Variant 
Dim lnStart As Long 
Dim lnLastrow As Long 
Dim lnCounter As Long 

Set wbBook = ThisWorkbook 
Set wsSheet = wbBook.Worksheets(1) 


'Populate the variables with values from Worksheet 
With wsSheet 
    lnStart = .Range("D65536").End(xlUp).Row 
    vaWorkorder = .Range("A2:A" & lnStart).Value 
    vaTaskname = .Range("E2:E" & lnStart).Value 
    vaHours = .Range("F2:F" & lnStart).Value 
    vaArea = .Range("G2:G" & lnStart).Value 
    vaSkill = .Range("H2:H" & lnStart).Value 
End With 

'Instantiate and open MS Project and the project 
'Need to add MS project libraries by going to tools->references 
Dim prApp As MSProject.Application 
Dim prProject As MSProject.Project 
    Set prApp = New MSProject.Application 
    prApp.FileOpen "C:\Users\manub\Desktop\work\Quantas\Qantaslink template.mpp" 
    Set prProject = prApp.ActiveProject 
    'Add task and other wanted information to the project. 
    With prProject 
     For lnCounter = 1 To UBound(vaTaskname) 
      .Tasks.Add vaTaskname(lnCounter, 1) 
      With .Tasks(vaTaskname(lnCounter, 1)) 
       .Text2 = vaWorkorder(lnCounter, 1) 
       .Work = vaHours(lnCounter, 1) 
       .Text8 = vaSkill(lnCounter, 1) 
       .Text6 = vaArea(lnCounter, 1) 
      End With 
     Next lnCounter 
    End With 

    'Save the project and close MS Project. 
    With prApp 
     .FileSave 
     .Quit 
    End With 
    MsgBox "Done!", vbInformation 
    'Release objects from memory. 
    Set prProject = Nothing 
    Set prApp = Nothing 
End Sub 
+0

你的循環不應該運行,因爲'vaTaskName'不是一個數組,因爲它不是一個數組,它也沒有UBound.which是你的循環的限制。但是,這並不能解釋您引用的錯誤消息。這可以通過調試器將添加到導致錯誤的代碼行中的高亮來解釋。哪一個? – Variatus

+0

感謝您的回覆。當線lnCounter = 497時,我得到錯誤.Work = vaHours(lnCounter,1) – Keya

+0

在該行之前添加一行代碼:'如果InCounter = 497 Then Debug.Print vaHours(497,1)'。看看即時窗口中的值。它應該有什麼問題,使它與列中的所有其他人不同,可能是文本而不是數字。當然,您也可以在工作表中找到該值。將它移動到工作表中的其他位置,以防錯誤與數字497相關。請記住,您可以通過懸停光標或將它們打印到立即窗口來檢查變量值,同時在崩潰後暫停代碼執行。 – Variatus

回答

0

添加一行代碼,行前:If InCounter = 497 Then Debug.Print vaHours(497, 1)。看看即時窗口中的值。它應該有什麼問題,使它與列中的所有其他人不同,可能是文本而不是數字。當然,您也可以在工作表中找到該值。將它移到工作表中的另一個位置,以防錯誤與數字497相關。請記住,您可以通過懸停光標或在暫停代碼執行時將其打印到立即窗口來檢查變量值。

在行With .Tasks(vaTaskname(lnCounter, 1))處添加一個斷點。你可以通過點擊代碼左邊的灰色條,在指定的行旁邊。然後運行代碼。它將在折點停止。按F8前進一行。按F5將運行代碼的其餘部分,但是因爲這意味着重複循環,它將再次停止在相同的中斷點。在停止時,您可以在立即窗口中詢問任何值,或通過將其懸停在其上讀取變量值。瞭解發生了什麼。

而且請不要說你很遺憾你離開了。這讓我很難過。 :-)