UsedRange.Count计数错误

时间:2012-08-09 15:00:18

标签: excel vba excel-vba

摘要:我从一张纸上取一行数据并将其粘贴到另一张纸上,但是这张纸只是日常使用的东西,只需在旧数据下输入新数据。

问题:在每次新的投放中,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 个答案:

答案 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 的问题是您不能在受保护的工作表上使用它。