Range.Rows.Count与我可以通过在Excel 2010 VBA中将行索引传递给Range.Rows返回的行不匹配

时间:2014-07-12 03:05:53

标签: excel-vba vba excel

我有一个包含600行的工作表,每行代表一名学生。我有一个用户表单,一次显示一个学生。表单上的Next / Previous按钮触发GetStudent Sub,它接受一个参数,即当前行索引。我不想一次使用所有600行,所以我在GetStudent Sub中使用A1:Z10语法创建一个范围。这是以编程方式完成的,但为了清楚起见,我在代码示例中添加了一个文字值:

Dim ds As Range, w As Worksheet, currentRow As Range
Set w = ActiveWorkbook.Worksheets("students_sheet")
Set ds = w.Range("A4:Z5")

如果我这样做

Debug.Print ds.Rows.Count

我得到预期的2,但是当我将索引传递给ds.Rows()

Set currentRow = ds.Rows(rowIndex)

我在工作表中的下一行一直到工作表中的600行,而不仅仅是指定范围内的2行。范围不限于Rows.Count属性指示的2行。任何人都可以帮我弄清楚我做错了什么吗?

1 个答案:

答案 0 :(得分:2)

Rows属性 relative 属于您调用它的范围,并且不受范围本身限制。

因此,当ds设置为A4:Z5并且您致电ds.Rows(rowIndex)时,您将获得

rowIndex     Range
1            A4:Z4
10           A13:Z13
0            A3:Z3
-2           A1:Z1
-3           error