我目前有一个程序,可以使用以下代码确定下一个空行:
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( 值,允许我更改为仅一行代码:
Public Function GetEmptyRow() As Long
GetEmptyRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1
End Function
但是,如果删除底部的任何行,它将返回范围中最后一个行下的行,即使它是空白的。有没有办法使用 .结束(xlUp(?
更新阅读建议后,我最终将代码更改为:
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
这似乎可以解决问题。我不确定这是否是最有效的方法,但它肯定会完成工作。感谢您的建议!
不能使用.End
属性跳过空白,它模拟单击单元格并在键盘上按ctrl+up 或End+up时将发生的操作。
- 如果从非空白单元格开始,它将自动在范围为空白的地方停止,或者
- 如果从空白单元格开始,它将自动停止在范围不为空白的地方。
这是有关该属性的 MSDN 文档,这是有关该主题的另一个非常好的答案。