UsedRange.Подсчет подсчет неправильный

резюме: Я беру строку данных с одного листа и вставляю ее в другой, однако лист будет ежедневным использованием, Когда новые данные просто вводятся ниже старых данных.

проблема: при каждом новом запуске 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 ответов


изменения: 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).Row


эти две строки делают магию

  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


Спасибо за дискуссию...

.UsedRange.Rows.Count и .UsedRange.Columns.Count работать нормально, если есть что-то в ячейке A1. В противном случае необходимо использовать решение SpecialCells.

надеюсь, это полезно.


>>>> Я закончил использовать этот простой цикл, чтобы найти мою последнюю используемую строку, однако методы, которые @Scott Holtzman отображаются выше, также будут работать.

    i = 1
    Do

        If Range("A" & i) = "" Then
            Exit Do
        Else
            i = i + 1
        End If

    Loop Until Range("A" & i) = ""

это действительно простой цикл подсчета, но он хорошо подходит для моих целей, учитывая, что каждая строка должна быть заполнена в моем листе.