0

我已经盯着这段代码很久了,我想我错过了一些非常简单的东西。此语句的目标是将“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)

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

4

1 回答 1

3

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

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

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


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

于 2013-05-06T18:26:48.250 回答