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)
你应该这样使用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
CountRows = ThisWorkbook.Worksheets(1).Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
473939 次 |
| 最近记录: |