我在Excel VBA中从SpecialCells(xlCellTypeLastCell)
获取准确值时遇到了困难。以下代码应输出“TrackedItems”工作表中第一个空行的行号。工作表有8行,但代码输出25(应输出9):
emptyRow = 1 + wb.Worksheets("TrackedItems").Cells.SpecialCells(xlCellTypeLastCell).Row
MsgBox emptyRow
在这个特定的例子中,this answer将解决我的问题,因为电子表格没有稀疏填充(没有空白单元格与非空白单元格混合)。但是,我多次使用xlCellTypeLastCell
,并没有遇到此问题,包括数据 sparseley填充的情况。导致xlCellTypeLastCell
以这种方式行事的原因是什么?有没有办法让它表现得正常,还是我必须依赖自定义编码的功能?我是否应该使用具有此类功能的xlCellTypeLastCell
替换旧作品,或者它当前是否有效这意味着它不会在以后中断(至少如果我不更改这些工作簿中的任何代码)?
答案 0 :(得分:1)
emptyRow = range("A" & activesheet.rows.count).end(xlup).row
返回包含数据的最后一行可能吗?
答案 1 :(得分:0)
第24行中可能有格式。我知道我迟到了,但是我只是遇到了这个问题。
xlCellTypeLastCell会为最后一个单元格提供格式,即使它为空。
您可能要这样做,改编自http://www.rondebruin.nl/win/s9/win005.htm
Sub Lastcell(rowz&, colz&) ' -- get last cell in sheet
Dim zRange As Range
Set zRange = Cells.Find("*", [a1], xlFormulas, xlPart, xlByRows, xlPrevious, False)
If zRange Is Nothing Then rowz = 1 Else rowz = zRange.row
Set zRange = Cells.Find("*", [a1], xlFormulas, xlPart, xlByColumns, xlPrevious, False)
If zRange Is Nothing Then colz = 1 Else colz = zRange.Column
End Sub