Установить возвращаемый объект диапазона из метода Copy() в VBA?


Я использовал метод Copy () для диапазона отфильтрованного списка в Excel 2003 с помощью макроса, и я хочу захватить возвращенный диапазон и подсчитать строки (чтобы я мог проверить, что скопировал больше одной строки. Однако я получаю ошибку "требуется объект".

Мне сообщили по ссылке VBA на веб-сайте Microsoft, что метод Copy() возвращает объект range. Однако, судя по коду, это не так. Пожалуйста, посоветуйте!

Спасибо.

For J = 1 To .ListObjects.Count
    ' Filter
    .ListObjects(J).Range.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=CritRange
    Set CopiedRange = .ListObjects(J).Range.Copy ' Object required error
    If CopiedRange.Rows.Count > 1 Then
    {etc...}
1 3

1 ответ:

Excel не возвращает объект range при выполнении операции Copy (). Я попытался протестировать диапазон для количества строк перед копированием, но это не сработало без учета специально видимых строк. Поэтому мне нужно было написать новую функцию:

Function CountVisibleRows(rg As Range)
    Dim NumRows As Integer
    ' Count visible cells in the first column, minus one to account for the header
    NumRows = rg.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
    CountVisibleRows = NumRows
End Function

Затем я проверил это на диапазоне перед копированием и определил количество строк, которые будут скопированы (поскольку метод Copy() по умолчанию копирует только видимые строки).