从VBA中的Copy()方法设置返回的Range对象?

时间:2011-10-26 09:10:38

标签: vba excel-2003

我使用宏在Excel 2003中使用了Copy()方法对过滤后的List范围,我想获取返回的范围并计算行数(所以我可以检查我复制了多行。但是我得到“需要对象”错误。

微软网站上的VBA引用告诉我,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 :(得分:0)

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()方法默认只复制可见行)。