2012-04-17 80 views
2

我寫一段代碼,傳輸選擇在Excel表單數據到一個數組,然後將其用於打印上的新的電子表格中的數據。但是,我得到一個「範圍的下標超出」錯誤,即使當我在滾動出現selectArr一個值(i - 1)。這裏是我的代碼:下標超出範圍,即使值被定義

Sub Marascuilo() 
    Dim numRows As Integer 'Number of rows selected 
    numRows = Selection.Rows.Count 
    Dim selectArr() As Double 'Array containing numbers from selected cells 
    selectArr = loadArr(numRows) 'Load values into array 
    For i = 2 To UBound(selectArr) - LBound(selectArr) + 2 
     Sheets("Sheet 4").Cells(i, 2).Value = selectArr(i - 1) 
    Next 
End Sub 

'This function loads the values from the selected cells into selectArr. 
Function loadArr(numRows) As Double() 
    Dim ResultArray() As Double 
    r = 1 
    For Each v In Selection 
     ReDim Preserve ResultArray(1 To r) 
     If v <> "" Then 
      ResultArray(r) = v.Value 
      r = r + 1 
     End If 
    Next 
    loadArr = ResultArray 
End Function 

任何想法,如何解決這個問題?

謝謝!

周杰倫

+2

你確定這個問題是selectArr(I - 1),而不是表( 「表4」)細胞(1,2)? – 2012-04-17 17:35:34

+0

不知道在Excel操作順序也許你需要這個......'因爲我= 2〜(UBound函數(selectArr) - LBOUND(selectArr)+ 2)' – xQbert 2012-04-17 17:36:06

+2

我與託德同意。我有一種感覺,'表(「表4」)'應該是'表(「Sheet4」)':) – 2012-04-17 17:38:01

回答

1

而不是使用表的(「表4」),你可能會考慮使用該表的代號。如果您查看項目瀏覽器窗口,每張表都有一個名稱和一個CodeName。它可能看起來像這樣

Sheet1 (Sheet1) 
Sheet2 (Sheet2) 

第一個是CodeName(不能從UI更改)。 parens中的那個是標籤名稱。在Project Explorer中選擇圖紙,然後按F4打開屬性對話框。轉到(名稱)屬性(一個命名不清的屬性)並將其改爲有意義的。我更改了所有表單的CodeNames,並使用wsh前綴。我的表,這是一個日誌有

wshLog 

現在我可以在我的代碼使用wshLog一個代號,我得到一些好處。首先,如果有人在UI中重命名工作表,代碼仍然有效。第二個是我可以鍵入wshlog(全部小寫)和VBE將其更改爲wshLog和我得到的視覺線索,我拼寫正確。最後,我的代碼更具可讀性,例如wshFinalReport vs. Sheets(「Sheet1」)。