ActiveSheet.UsedRange.Rows.count给每个运行错误和不同的结果

我的工作表有29行和39列。 目前我使用

lrow = ActiveSheet.UsedRange.Rows.count – >获取使用的行数
lColumn = ActiveSheet.UsedRange.Columns.count – >获取使用的列数

Excel每次运行时都会给出错误的计数。 有时会给出:
行数:29列数:784
在其他运行它给
行数:32755,列数:784
而在其他运行中,它给出了不同的值。

我已经检查了29行之后和39行之后没有垃圾数据。 另外,在填充数据之前,我要清除工作表: ActiveWorkbook.Worksheets("Field Difference").Cells.Delete

我希望ActiveWorkbook.Worksheets("Field Difference").Cells.Delete完全清除工作表并清除工作表中的任何垃圾数据。 我怎么能确保工作表中没有垃圾数据。

我明白,我们有其他选项,如:
ActiveWorkbook.Worksheets("Field Difference").UsedRange.ClearContents – 仅清除内容
ActiveWorkbook.Worksheets("Field Difference").UsedRange.Clear – 清除格式。

请让我知道为什么我得到了错误的行数和列数值,出路是什么。 我可以使用其他可靠的方法来获得UsedRange行数和UsedRange列数。

对于列A中的最后一行和列:

 Dim sht as Worksheets dim lRow as Long Set sht = Worksheets("Field Difference") lRow = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row lCol = sht.Cells(1, sht.Columns.Count).End(xlToLeft).Column 

工作表布局可以影响.UsedRange和.CurrentRegion属性。 对于一个明确的“最后一个单元格”,从A1开始按行向后search,然后按照使用毯子通配符的列向后search。

 dim lr as long, lc as long with worksheets("sheet1") lr = .cells.find(what:=chr(42), after:=.cells(1), searchdirection:=xlprevious, _ lookat:=xlpart, searchorder:=xlbyrows, lookin:=xlformulas).row lc = .cells.find(what:=chr(42), after:=.cells(1), searchdirection:=xlprevious, _ lookat:=xlpart, searchorder:=xlbycolumns, lookin:=xlformulas).column debug.print .cells(lr, lc).address(0, 0) end with 

在这里输入图像说明

用于查找给定列(行)的最后填充的单元格的方法是众所周知的。 从该列(行)的最后一个单元格使用End(xlUp)End(xlToLeft) )。

要获取工作表中实际填充的区域的最后一个单元格,可以使用此自定义函数,它将可靠地将其提供给您:

 Public Function getLastCell(sh As Worksheet) As Range Dim lastRow As Long, lastCol As Long lastRow = sh.Cells.Find("*", sh.Cells(1, 1), xlFormulas, xlPart, xlByRows, xlPrevious).Row lastCol = sh.Cells.Find("*", sh.Cells(1, 1), xlFormulas, xlPart, xlByColumns, xlPrevious).Column Set getLastCell = sh.Cells(lastRow, lastCol) End Function 

通过引入最后一个单元格,您可以使用从A1到该单元格的整个范围

 mysheet.Range("A1", getLastCell(mySheet)) 

偶尔你可能会感兴趣的是find不是从A1开始的人口稠密地区。 在这种情况下,您可以使用此自定义函数find类似于实际填充区域的“Topleft”单元:

 Public Function getFirstCell(sh As Worksheet) As Range Dim lastRow As Long, lastCol As Long lastRow = sh.Cells.Find("*", sh.Cells(sh.Rows.Count, sh.Columns.Count), xlFormulas, xlPart, xlByRows, xlNext).Row lastCol = sh.Cells.Find("*", sh.Cells(sh.Rows.Count, sh.Columns.Count), xlFormulas, xlPart, xlByColumns, xlNext).Column Set getFirstCell = sh.Cells(lastRow, lastCol) End Function 

最后,你可以join这两个单元格来获得实际上被染色的区域,如下所示:

 mysheet.Range(getFirstCell(mySheet), getLastCell(mySheet))