摘要:我要从一个工作表中获取一行数据并将其粘贴到另一个工作表中,但是该工作表将是一种日常使用的事物,其中新数据只是在旧数据下方输入。
问题:在每次新运行中,UsedRange.Count
中始终添加7。例如:一次运行UsedRange.Count
将为7;下次我运行该功能时,计数将为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
至:usedRows = Sheets("EFT").Range("A" & Sheets("EFT").Rows.Count).End(xlUp).Row
可以将“A”更改为您希望计算总列数的任何行。
使用UsedRange
存在危险,因为它会考虑到此类因素和格式化的单元格而没有数据,而其他因素会给您带来意想不到的结果,例如,如果您希望数据以Range(“A1”)开始,但实际上它会开始在另一个范围内!
但是,我要说的是,如果您确实希望使用UsedRange
,则上面的代码仍然无法获取行。使用此代替UsedRange.Rows.Count
或获取UsedRange的最后一个绝对单元格,请使用UsedRange.SpecialCells(xlCellTypeLastCell).Row