2

我很难从SpecialCells(xlCellTypeLastCell)Excel VBA 中获得准确的值。以下代码应输出“TrackedItems”工作表中第一个空行的行号。工作表有 8 行,但代码输出 25(应该输出 9):

emptyRow = 1 + wb.Worksheets("TrackedItems").Cells.SpecialCells(xlCellTypeLastCell).Row
MsgBox emptyRow

在这个特定的例子中,这个答案将解决我的问题,因为电子表格不是稀疏填充的(没有空白单元格与非空白单元格混合)。但是,我使用过xlCellTypeLastCell很多次,并没有遇到过这个问题,包括在数据稀疏的情况。是什么原因导致xlCellTypeLastCell以这种方式行事?有什么方法可以让它正常运行,还是我必须依赖自定义编码的函数?我应该用这些函数替换我的旧工作xlCellTypeLastCell,还是它当前工作的事实是否意味着它以后不会中断(至少如果我不更改这些工作簿中的任何代码)?

4

2 回答 2

1

你可以试试这个:

emptyRow = range("A" & activesheet.rows.count).end(xlup).row

可能返回包含数据的最后一行?

于 2013-06-13T15:59:13.543 回答
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
于 2019-09-07T17:44:43.943 回答