Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba UsedRange,数错了_Vba_Excel - Fatal编程技术网

Vba UsedRange,数错了

Vba UsedRange,数错了,vba,excel,Vba,Excel,摘要:我从一张工作表中取出一行数据并粘贴到另一张工作表中,但是工作表是一种日常使用的东西,新数据只是在旧数据下面输入 问题:每次新运行时,7始终添加到UsedRange.Count。例如:在一次运行中,UsedRange.Count将为7;下次运行该函数时,计数将为14 我在寻找什么:为什么会这样?有没有办法帮助UsedRange更准确 -为了参考起见,我包含了整个函数 Function eftGrabber() Dim usedRows As Integer

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

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

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

更改:
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中的某些内容