首页 文章

可以.End(xlUp)跳过Excel表格数据范围底部的空白行/单元格吗?

提问于
浏览
0

我目前有一个程序,通过使用此代码确定下一个空行:

Public Function GetEmptyRow() As Long
    If ActiveSheet.Range("E" & Rows.Count).End(xlUp).Row > _
    ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row Then
        GetEmptyRow = ActiveSheet.Range("E" & Rows.Count).End(xlUp).Row + 1
    Else
        GetEmptyRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1
    End If
End Function

比较大于因为如果活动行中的项目由多个人使用,则它会创建一个新行并在列E中嵌套第二个名称,其中列A到D为空 .

我试图用Excel表添加条带格式,现在当添加新行时,数据范围中A到D的空白单元格“停止”End(xlUp)值,允许我更改为just一行代码:

Public Function GetEmptyRow() As Long
    GetEmptyRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1
End Function

但是,如果在底部删除了任何行,则返回该范围中最后一行的行,即使它是空白的 . 有没有办法使用.End(xlUp)跳过Excel表数据范围中的空白?

Update 阅读完建议后,我最终将代码更改为:

Public Function GetEmptyRow() As Long

    Dim lastRow1 As Integer, lastRow2 As Integer

    lastRow1 = ActiveSheet.ListObjects("Table3").Range.Columns(2) _
    .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    lastRow2 = ActiveSheet.ListObjects("Table3").Range.Columns(5) _
    .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    If lastRow2 > lastRow1 Then
        GetEmptyRow = lastRow2 + 1
    Else
        GetEmptyRow = lastRow1 + 1
    End If

End Function

这似乎可以解决问题 . 我不确定这是否是最有效的方式,但它肯定能完成工作 . 谢谢你的建议!

1 回答

  • 1

    您不能使用 .End 属性跳过空白,它会模仿单击单元格并按下向上或向上键盘时发生的操作 .

    • 如果从非空单元格开始,它将自动停在范围为空的位置, or

    • 如果从空白单元格开始,它将自动停止范围为 not 空白 .

    Here是该属性的MSDN文档,here是该主题的另一个非常好的答案 .

相关问题