我目前有一个程序,通过使用此代码确定下一个空行:
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 回答
您不能使用
.End
属性跳过空白,它会模仿单击单元格并按下向上或向上键盘时发生的操作 .如果从非空单元格开始,它将自动停在范围为空的位置, or
如果从空白单元格开始,它将自动停止范围为 not 空白 .
Here是该属性的MSDN文档,here是该主题的另一个非常好的答案 .