Sub GetRange()
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Set rng1 = Cells.Find("*", [a1], xlFormulas, , xlByRows, xlPrevious)
Set rng2 = Cells.Find("*", [a1], xlFormulas, , xlByColumns, xlPrevious)
If Not rng1 Is Nothing Then
Set rng3 = Range([a1], Cells(rng1.Row, rng2.Column))
MsgBox "Range is " & rng3.Address(0, 0)
'if you need to actual select the range (which is rare in VBA)
Application.Goto rng3
Else
MsgBox "sheet is blank", vbCritical
End If
End Sub
Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column))
完整代码:
Sub GetRange()
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Set rng1 = Cells.Find("*", [a1], , , xlByRows, xlPrevious)
Set rng2 = Cells.Find("*", [a1], , , xlByColumns, xlPrevious)
If Not rng1 Is Nothing Then
Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column))
MsgBox "Range is " & rng3.Address(0, 0)
'if you need to actual select the range (which is rare in VBA)
Application.Goto rng3
Else
MsgBox "sheet is blank", vbCritical
End If
End Sub
4 回答
你需要为代码制作这些mod
工作表可能为空,因此您永远不应将
Select
与Find
一起使用,因为如果查找不返回任何内容,则会出错 . 而是测试范围对象Is Not Nothing
Find
可以按行和按列搜索 . 您需要确定 both 最后一行和列以确定最后使用的真实单元格一旦确定了真正的最后一个单元格,使用
Range
设置从第一个单元格(A1)到使用两个Find
范围确定的单元格的范围请参阅下面的代码
如果
Find
得到一个值,那么它从A1到_1136976_由两个Find
标识的最后一个使用的单元格的范围rng3
.在A列中选择A1到最后一个使用的单元格(包括其间的空白)就像这样简单:
要选择A1到整个工作表中使用的最后一个单元格(无论它是否在A列中使用):
我想出了如何修改代码以选择从指定单元格开始并在最后一个单元格结束的范围 . 在第8行,将a1更改为您要开始的单元格 . 就我而言,我选择了j28 .
完整代码:
@brettdj指出使用
ActiveSheet.UsedRange
来清除当前使用的范围 . 我会使用下面的简单代码 .