2012-10-10 67 views
1

我試圖寫一個函數如下:應用程序定義或對象定義的錯誤

Function getEntityCode(fileName As String) As Range 
Dim entitySheet As Worksheet 
Dim c As Range 
Dim i As Integer 
Dim valid As Boolean 
Dim finalRow As Integer 
Dim finalCol As Integer 

Set entitySheet = Workbooks("OHUploads.xlsm").Worksheets("EntityCodes") 
finalRow = entitySheet.Cells(Application.Rows.Count, 1).End(xlUp).Row 
On Error GoTo ErrHandler: 
With entitySheet 
    Set c = .Range(.Cells(1, 3), .Cells(1, finalCol)) 
End With 
valid = False 
ErrHandler: 
Debug.Print Error(Err) 
If valid = False Then 
    Set getEntityCode = entitySheet.Range(entitySheet.Cells(1, 3), entitySheet.Cells(1, finalCol)) 
Else 
    Set getEntityCode = c 
End If 
End Function 

但無論怎麼做,何時該語句執行到 集合C = .Range(.Cells( 1,3),.Cells(i,finalCol)) 它總是在errHandler中,它總是顯示:應用程序定義或對象定義的錯誤

我以爲我明確定義了一切,不能看看我做錯了什麼地方,有誰能幫我解決這個問題,非常感謝。

+1

另外需要注意的是,即使有錯誤少執行它仍然會通過'ErrHandler'段運行。您可能希望在ErrHandler段之前停止執行錯誤的執行方法。如果需要的話,讓'ErrHandler'段重定向到結束段。很多時候你會看到人們將錯誤段註釋爲「Err_Method」,出口段註釋爲「Exit_Method」,其中Method是方法的名稱。有助於可讀性和流量控制。 – GoldBishop

回答

2

你從不爲finalCol設定的值,因此它,因爲細胞是基於代替基於0 1被缺省爲0。

調用Cells(1,0)引發錯誤。或者說,行或列0不存在。

我建議,要麼有行雲:finalCol = 1或只使用1

相關問題