摘要:我从一张纸上取一行数据并将其粘贴到另一张纸上,但是这张纸只是日常使用的东西,只需在旧数据下输入新数据。
问题:在每次新的投放中,7都会一直添加到UsedRange.Count
。例如:在一次运行中,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
如果我遗漏了任何重要细节,请告诉我。提前谢谢!
答案 0 :(得分:11)
更改: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
答案 1 :(得分:3)
这两行做了魔术
usedCol = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
usedRow = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
有关详细信息,请访问Microsoft的网站
http://msdn.microsoft.com/en-us/library/office/ff196157.aspx
答案 2 :(得分:1)
感谢您的讨论...
如果单元格A1中有某些内容, .UsedRange.Rows.Count
和.UsedRange.Columns.Count
可以正常工作。否则需要使用SpecialCells解决方案。
希望这有用。
答案 3 :(得分:0)
如果你像这样使用“UsedRange”就可以使用 >>
x := Sheet.UsedRange.Row + Sheet.UsedRange.Rows.Count - 1;
y := Sheet.UsedRange.Column + Sheet.UsedRange.Columns.Count - 1;
SpecialCells 的问题是您不能在受保护的工作表上使用它。