范围内的Excel VBA数组从-1开始,而不是0

时间:2015-01-10 16:04:11

标签: excel-vba vba excel

我在Excel中使用VBA。我希望用户能够选择一组垂直的连续单元格,并将这些单元格的值放入数组中。下面的代码执行此操作,但我无法弄清楚为什么Debug.Print DatArr(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

3 个答案:

答案 0 :(得分:2)

您需要参考AuxDatDatArr ,了解他们所代表的范围

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

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

访问via,例如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.

答案 1 :(得分:1)

这是因为 Option Base 语句影响数组而不是范围。
所以你正在寻找一个单元格之前范围的开始。

答案 2 :(得分: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

正如Gary的学生所说,Ranges是从1开始索引的细胞集合。