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) = ""
这是一个非常简单的计数循环,但它适合我的目的,考虑到每行应填写在我的工作表。