UsedRange.Count计数错误

总结:我从一张纸上取出一行数据并粘贴到另一张纸上,然而这张纸是一种日常使用的东西,只是在旧数据下方input新数据。

问题:在每次新运行中,始终将7添加到UsedRange.Count 。 例如:一次运行UsedRange.Count将是7; 下次我运行这个函数的时候,count就是14。

我在寻找什么:为什么是这种情况,有没有办法来帮助UsedRange更准确

为了参考,我包含了整个函数。

 Function eftGrabber() Dim usedRows As Integer Dim i As Integer ChDir "\\..." Workbooks.Open Filename:= _ "\\...\eftGrabber.xlsm" usedRows = Sheets("EFT").UsedRange.Count Windows("Data").Activate Sheets("DataSheet").Range("A11").EntireRow.Copy Windows("eftGrabber").Activate Sheets("EFT").Range("A" & usedRows + 1).Select ActiveSheet.Paste i = usedRows Do 'THIS LOOP DELETES BLANKS AFTER POSTING NEW LINES Range("A" & i).Select If Range("A" & i) = "" Then ActiveCell.EntireRow.Delete End If i = i - 1 Loop Until i = 1 Windows("eftGrabber").Activate ActiveWorkbook.Save Windows("eftGrabber").Close End Function 

如果我忽略了一些重要的细节,请告诉我。 提前致谢!

更改: usedRows = Sheets("EFT").UsedRange.Count

To: usedRows = Sheets("EFT").Range("A" & Sheets("EFT").Rows.Count).End(xlUp).Row

其中“A”可以更改为任何你想要统计列数的行。

使用UsedRange存在一个危险,因为它会影响到这些东西和格式化的单元格,而没有数据和其他的东西可以给你意想不到的结果,就像你期望你的数据以Range(“A1”)开始,但是它真的开始在另一个范围内!

但是,我会说,如果你真的想使用UsedRange ,你的代码仍然是错误的获取行。 使用它来代替UsedRange.Rows.Count或获取UsedRange.Rows.Count的最后一个绝对单元格,使用UsedRange.SpecialCells(xlCellTypeLastCell).Row

这两条线就是这样做的

  usedCol = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column usedRow = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row 

欲了解更多信息,请访问微软网站

http://msdn.microsoft.com/en-us/library/office/ff196157.aspx

感谢您的讨论…

.UsedRange.Rows.Count.UsedRange.Columns.Count工作正常提供有单元格A1中的东西。 否则需要使用SpecialCells解决scheme。

希望这是有帮助的。

<<<<我的解决scheme:>>>>>我最终使用这个简单的循环来find我最后使用的Row,但是@Scott Holtzman上面显示的方法也可以工作。

  i = 1 Do If Range("A" & i) = "" Then Exit Do Else i = i + 1 End If Loop Until Range("A" & i) = "" 

这是一个非常简单的计数循环,但它适合我的目的,考虑到每行应填写在我的工作表。