2015-01-10 118 views
1

我在Excel中使用VBA。我希望用戶能夠選擇一組垂直的連續單元格,並將這些單元格的值放入數組中。下面的代碼這樣做,但我不明白爲什麼Debug.Print DatArr(0)打印選定區域上方的一個單元格的值。我究竟做錯了什麼?從範圍開始的Excel VBA數組從-1開始而不是0

Option Explicit 
Option Base 0 

Sub reconcile() 
Dim DatArr As Range 
Dim AuxDat As Range 
Dim StartCellRange As String 
Dim CellCnt As Integer 


    Set DatArr = Application.InputBox("Select a contiguous range of cells.", "SelectARAnge Demo", Selection.Address, , , , , 8) 
    CellCnt = DatArr.Count 


    DatArr.Select 

    Selection.Offset(0, -1).Select 


    Set AuxDat = Selection 
    Debug.Print AuxDat.Count 
    Debug.Print AuxDat(0) 
    Debug.Print DatArr(0) 
End Sub 

回答

1

這是因爲選項基本語句影響陣列而非範圍。
所以,你正在尋找一個單元格之前範圍的開始。

+1

作爲索引細胞的集合清楚的一點,所使用的「Option Base」設置不會影響OP代碼中的輸出。 –

+0

@JasonFaulkner .........你是絕對正確的!! .......... ** Option Base **可能已被完全省略,因爲沒有數組正在生成的發佈代碼。 –

+0

不僅如此,Option Base隻影響未指定下限的聲明數組。一個Range.Value數組總是以base 1爲基數,而不管Option Base。 –

2

您需要相對於基準AuxDatDatArr他們respresent範圍

' First cell in AuxDat. 
Debug.Print AuxDat.Cells(1, 1).Value 

' First cell in DatArr. 
Debug.Print DatArr.Cells(1, 1).Value 

通過訪問,例如AuxDat(x),將允許即使它是你的選擇範圍以外的任何值(如只要它符合Excel的範圍)。例如(使用你的代碼),選擇範圍$B$5:$B$7

Debug.Print AuxDat(-1) ' This is allowed and will print A3. 
Debug.Print AuxDat(5) ' This is allowed and will print A9. 
0

編輯代碼:

Option Explicit 

Sub reconcile() 
Dim DatArr As Range 
Dim AuxDat As Range 
Dim CellCnt As Integer 

Set DatArr = _ 
    Application.InputBox(_ 
     "Select a contiguous range of cells.", _ 
     "SelectARAnge Demo", _ 
     Selection.Address, , , , , 8) 

CellCnt = DatArr.Count 

If DatArr.Columns(1).Column > 1 Then '<<small error trap in case the user selects column A 
    Set AuxDat = DatArr.Offset.Offset(0, -1) 
End If 

Debug.Print AuxDat.Count 
Debug.Print AuxDat(1).Value 
Debug.Print DatArr(1).Value 
End Sub 

由於加里的學生都有規定的範圍是從特殊1

相關問題