Установить возвращенный объект Range из метода Copy () в VBA? - PullRequest
3 голосов
/ 26 октября 2011

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

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

Спасибо.

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 Ответ

0 голосов
/ 29 октября 2011

Excel не возвращает объект диапазона в операции 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 () копирует только видимые строки по умолчанию)).

...