我写了一个简单的代码来说明我的困境。
Sub test()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Sheet1")
Dim k As Long
k = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.Count
End Sub
发生的情况是这样的。我们计算从A1开始的包含数值的行。如果包含数值的行数是>1,那么代码就很好用。然而,如果A1是唯一包含任何数值的单元格,k=1,048,576,我猜这是Excel允许的最大行数。
为什么k=1?
图片。
编码有效]1
这是不对的]2 !
编辑:我使用的解决方法如下。
Sub test()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Sheet1")
Dim k As Long
k = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.Count
If k = 1048576 Then
k = 1
End If
MsgBox (k)
End Sub
因为当有值的行数为1时,k总是等于1048576。 只是感觉要做这样的事有点傻。
你应该使用UsedRange
来代替,像这样。
Sub test()
Dim sh As Worksheet
Dim rn As Range
Set sh = ThisWorkbook.Sheets("Sheet1")
Dim k As Long
Set rn = sh.UsedRange
k = rn.Rows.Count + rn.Row - 1
End Sub
+rn.Row - 1
部分是因为UsedRange只从第一行和第一列开始使用,所以如果你在第3行到第10行有东西,但第1行和第2行是空的,rn.Rows.Count
会是8