Vba UsedRange,数错了
摘要:我从一张工作表中取出一行数据并粘贴到另一张工作表中,但是工作表是一种日常使用的东西,新数据只是在旧数据下面输入 问题:每次新运行时,7始终添加到Vba UsedRange,数错了,vba,excel,Vba,Excel,摘要:我从一张工作表中取出一行数据并粘贴到另一张工作表中,但是工作表是一种日常使用的东西,新数据只是在旧数据下面输入 问题:每次新运行时,7始终添加到UsedRange.Count。例如:在一次运行中,UsedRange.Count将为7;下次运行该函数时,计数将为14 我在寻找什么:为什么会这样?有没有办法帮助UsedRange更准确 -为了参考起见,我包含了整个函数 Function eftGrabber() Dim usedRows As Integer
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
如果我遗漏了任何重要的细节,请告诉我。提前谢谢 更改:
usedRows=Sheets(“EFT”).UsedRange.Count
到:usedRows=Sheets(“EFT”).Range(“A”)和Sheets(“EFT”).Rows.Count)。End(xlUp)。Row
其中“A”可以更改为您希望计算总列数的任何行
使用UsedRange
有一种危险,因为它会考虑到这样的因素,即没有数据的格式化单元格和其他可能会给您带来意外结果的因素,比如您希望数据从范围(“A1”)开始,但它确实从另一个范围开始
但是,我要说的是,如果您确实希望使用UsedRange
,那么您上面的代码获取行仍然是错误的。改为使用此UsedRange.Rows.Count
或要获取UsedRange的最后一个绝对单元格,请使用UsedRange.SpecialCells(xlCellTypeLastCell)。行
usedCol = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
usedRow = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
有关更多信息,请访问Microsoft网站
谢谢您的讨论
.UsedRange.Rows.Count
和.UsedRange.Columns.Count
如果单元格A1中有内容,则工作正常。否则需要使用SpecialCells解决方案
希望这对您有所帮助。“UsedRange”在您这样使用它时会起作用>>
x := Sheet.UsedRange.Row + Sheet.UsedRange.Rows.Count - 1;
y := Sheet.UsedRange.Column + Sheet.UsedRange.Columns.Count - 1;
特殊单元格的问题是不能在受保护的工作表上使用。哦,天哪,我没意识到我完全忘记了.Rows
部分。这可能就是为什么。迈克,你应该避免使用usedrange。相反,找到最后一行并将其用于粘贴。请参阅此链接以查找最后一行。如果使用:Sheet.UsedRange.Row+Sheet.UsedRange.Rows.Count-1,则不需要A1中的某些内容