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

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

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

一旦设置了variables,我想在循环中使用它,如下所示:

 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 

该variables被声明为一个范围,所以这是非常混乱。 当我遍历代码时,即使在执行set语句之后,i = 0。 有没有人有什么build议? 我看过的所有例子都没有帮助我解决问题。 非常感谢!

编辑:我也试过这一行:

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

和这一行:

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

但是两者都有相同的结果。

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

我认为该程序不能将Range转换为完全符合您的喜好的整数。

尝试使用For i = lastRowCompass.Row或另一个起始值。


如果我可能会build议,请始终在代码文件的顶部使用Option Explicit 。 这将要求您声明所有variables(less量额外的编码),但可以帮助避免一些奇怪的分配。