VBA:为什么我的范围偏移返回0(或为空)?

时间:2013-05-06 18:22:41

标签: excel vba excel-vba for-loop offset

我一直盯着这段代码,我觉得我错过了很简单的东西。此语句的目标是将“lastRowCompass”变量(范围)设置为列中的第一个空单元格:

Set lastRowCompass = Cells(Rows.Count, 2).End(xlUp).Offset(1, 0)

设置变量后,我想在循环中使用它:

For i = lastRowCompass To Range("D" & Rows.Count).End(xlUp).Row
If ActiveSheet.Cells(i, 4) <> "" Then
    Cells(i, 4).Offset(0, -2) = hireDate
End If
Next

该变量被声明为Range,因此这非常令人困惑。当我单步执行代码时,即使在执行set语句后i = 0。有没有人有什么建议?我看过的所有例子都没有帮助我解决这个问题。非常感谢!

编辑:我也试过这一行:

Set lastRowCompass =Range("B1").End(xlDown).Offset(1, 0)

和这一行:

Set lastRowCompass = Range("B" & Rows.Count).End(xlDown).Offset(1, 0)

但我对两者都有相同的结果。

1 个答案:

答案 0 :(得分:3)

For i =中你必须有一个整数,但是你传递的是Range。 (Offset返回一个Range对象,所以lastRowCompass不是整数,它是一个Range)

我认为程序无法完全按照您喜欢的方式将Range转换为整数。

尝试使用For i = lastRowCompass.Row或其他起始值。


如果我建议,请始终在代码文件的顶部使用Option Explicit。 这将要求你声明所有变量(少量额外编码),但可以帮助避免一些奇怪的任务。