VBA - Range.Row.Count

doc*_*jay 26 excel vba excel-vba

我写了一个简单的代码来说明我的困境.

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
Run Code Online (Sandbox Code Playgroud)

会发生什么:我们计算包含从A1开始的值的行.如果包含值的行数> 1,则代码效果很好.但是,如果A1是唯一包含任何值的单元格,则k = 1,048,576,我猜这是Excel中允许的最大行数.

为什么k = 1?

图片:

代码有效

这是错的

编辑:我正在使用的解决方法如下:

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
Run Code Online (Sandbox Code Playgroud)

因为当值为1的行数时,k总是等于1048576.只是感觉有点傻,不得不做这样的事情.

Cha*_*ams 30

可能更好的解决方案是从底部向上工作:

k=sh.Range("A1048576").end(xlUp).row
Run Code Online (Sandbox Code Playgroud)


nee*_*lsg 8

你应该这样使用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
Run Code Online (Sandbox Code Playgroud)

+ rn.Row - 1部分是因为UsedRange仅在第一行和列使用时开始,因此如果您在第3行到第10行中有某些内容,但第1行和第2行为空,则为rn.Rows.Count8


Dad*_*ado 5

CountRows = ThisWorkbook.Worksheets(1).Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
Run Code Online (Sandbox Code Playgroud)