6

摘要:我从一张表中取出一行数据并将其粘贴到另一张表中,但是该表将是一种日常使用的东西,新数据只是在旧数据下方输入。

问题:每次新运行时,都会将 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

如果我遗漏了任何重要的细节,请告诉我。提前致谢!

4

4 回答 4

12

改变: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

于 2012-08-09T15:08:48.497 回答
5

这两条线很神奇

  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

于 2013-12-29T08:28:10.100 回答
2

谢谢讨论...

.UsedRange.Rows.Count.UsedRange.Columns.Count只要单元格A1中有东西,就可以正常工作。否则需要使用 SpecialCells 解决方案。

希望这会有所帮助。

于 2015-08-25T20:21:31.987 回答
0

如果你像这样使用“UsedRange”,它就可以工作>>

x := Sheet.UsedRange.Row + Sheet.UsedRange.Rows.Count - 1;
y := Sheet.UsedRange.Column + Sheet.UsedRange.Columns.Count - 1;

SpecialCells 的问题是您不能在受保护的工作表上使用它。

于 2021-05-04T00:21:46.967 回答