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) = ""
это действительно простой цикл подсчета, но он хорошо подходит для моих целей, учитывая, что каждая строка должна быть заполнена в моем листе.