获得实际使用范围

thi*_*one 20 excel vba excel-vba

我有一个带有按钮的Excel工作表.

当我调用usedRange()函数时,它返回的范围包括按钮部分.

无论如何我可以获得包含数据的实际使用范围吗?

Rea*_*idy 33

什么样的按钮,表单控件和ActiveX控件都不应该影响使用的范围.

已知的问题是excel不能很好地跟踪使用范围.通过VBA对使用范围的任何引用都会将值重置为当前使用的范围.所以尝试运行这个子程序:

Sub ResetUsedRng()
    Application.ActiveSheet.UsedRange 
End Sub 
Run Code Online (Sandbox Code Playgroud)

如果没有你可能会有一些格式悬挂.尝试清除/删除最后一行之后的所有单元格.

关于以上也见:

Excel开发人员提示

查找最后使用过的单元格的另一种方法:

    Dim rLastCell As Range

    Set rLastCell = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
Run Code Online (Sandbox Code Playgroud)

更改搜索方向以查找第一个使用过的单元格.


JMa*_*Max 22

Readify做了一个非常完整的答案.但是,我想添加End声明,你可以使用:

在列中的空白之前找到上次使用的单元格:

Sub LastCellBeforeBlankInColumn()
Range("A1").End(xldown).Select
End Sub
Run Code Online (Sandbox Code Playgroud)

找到列中最后使用的单元格:

Sub LastCellInColumn()
Range("A" & Rows.Count).End(xlup).Select
End Sub
Run Code Online (Sandbox Code Playgroud)

在行中的空白之前找到最后一个单元格:

Sub LastCellBeforeBlankInRow()
Range("A1").End(xlToRight).Select
End Sub
Run Code Online (Sandbox Code Playgroud)

找到行中最后一个使用过的单元格:

Sub LastCellInRow()
Range("IV1").End(xlToLeft).Select
End Sub
Run Code Online (Sandbox Code Playgroud)

请参阅此处以获取更多信息(以及解释为何xlCellTypeLastCell不太可靠).

  • +1很棒的信息.我建议使用Range("A"和Rows.Count).End(xlup),这样你的代码对于多个版本的excel是可行的. (6认同)

dav*_*ndy 5

这里有一对函数来返回工作表的最后一行和col,基于Reafidy的解决方案.

    Function LastRow(ws As Object) As Long

        Dim rLastCell As Object
        On Error GoTo ErrHan
        Set rLastCell = ws.Cells.Find("*", ws.Cells(1, 1), , , xlByRows, _
                                      xlPrevious)
        LastRow = rLastCell.Row

    ErrExit:
        Exit Function

    ErrHan:
        MsgBox "Error " & Err.Number & ": " & Err.Description, _
               vbExclamation, "LastRow()"
        Resume ErrExit

    End Function

    Function LastCol(ws As Object) As Long

        Dim rLastCell As Object
        On Error GoTo ErrHan
        Set rLastCell = ws.Cells.Find("*", ws.Cells(1, 1), , , xlByColumns, _
                                      xlPrevious)
        LastCol = rLastCell.Column

    ErrExit:
        Exit Function

    ErrHan:
        MsgBox "Error " & Err.Number & ": " & Err.Description, _
               vbExclamation, "LastRow()"
        Resume ErrExit

    End Function
Run Code Online (Sandbox Code Playgroud)