Excel.Application.Cells.SpecialCells(xlCellTypeLastCell)返回工作表底部,而不是最后一个数据单元格

我正在Excel 2013中的VBA中编写一个方法来遍历两个工作表中的行,并比较每个工作表中的行中的文本.但是,当我循环时,我发现代码循环遍历整个工作表,而不仅仅是带有数据的行. Excel.Sheets(“工作表Sheet”).Cells.SpecialCells(xlCellTypeLastCell)返回正确的列的单元格,但该行是在片材(1048576),而不是最后一行数据(1951)的最后一行.我已经在代码中写了一个空单元格的检查(因为我不能确定每一行都被使用),所以它不会导致问题,它只是意味着每次运行它需要比这应该.并且当从Worksheet_Change内部调用此方法时,它确实会减慢速度.

通常,当“最后”单元格被错误地报告时,我会发现保存通常会修复它,如果没有,那么从错误中删除行(不仅仅是内容,而是整行)报告最后一个单元格回到实际的最后一个单元格然后保存工作.但是,在这种情况下,它没有帮助.

我看过Google没有成功.如果我能提供帮助,我不想将所有数据和代码从本工作簿复制到新工作簿中.有人有什么建议吗?

(这里使用评论的信息太多了.)

VBA策划人Ron de Bruin写了一篇关于为什么xlCellTypeLastCell以及UsedRange可能在这里失败的文章:http://www.rondebruin.nl/win/s9/win005.htm.

(在我最初的评论Error in finding last used cell in VBA中链接的帖子中,UsedRange的缺陷以相同的方式描述.)

这是直接引用:

Possible problems with xlCellTypeLastCell and UsedRange are:

The last cell will only re-set when you save (or save/close/reopen the
file). If cell formatting is changed it will not reset the last cell,
clearing the data is not enough, you must delete the rows or columns
then, See: 07002

总而言之,查找工作表上最后一行的逻辑属于全局函数.您将一直使用此功能.以下是查找工作表上最后一行的示例:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'INPUT       : Sheet, the worksheet we'll search to find the last row
'OUTPUT      : Long, the last occupied row
'SPECIAL CASE: if Sheet is empty, return 1
'EXAMPLES    :
' 
'assume that there is a single 
'entry on MySheet in cell A5:
'
'LastRowNum(MySheet)
'>> 5
'
'assume that EmptySheet is totally empty:
'
'LastRowNum(EmptySheet)
'>> 1
'
Public Function LastRowNum(Sheet As Worksheet) As Long
    If Application.WorksheetFunction.CountA(Sheet.Cells) <> 0 Then
        LastRowNum = Sheet.Cells.Find(What:="*", _
                        LookIn:=xlFormulas, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious).Row
    Else
        LastRowNum = 1
    End If
End Function

对于downvote来说 – 不知道.我其实从未在这里投票哈哈.

https://stackoverflow.com/questions/25110873/excel-application-cells-specialcellsxlcelltypelastcell-returning-bottom-of-wor

转载注明原文:Excel.Application.Cells.SpecialCells(xlCellTypeLastCell)返回工作表底部,而不是最后一个数据单元格