我已经使用宏在Excel 2003中的过滤列表范围上使用了Copy()方法,我想获取返回的范围并计算行数(因此,我可以检查是否已复制多行。但是我得到了一个'所需对象”错误。
微软网站上的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...}
最佳答案
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()方法仅复制可见行)。
关于vba - 从VBA中的Copy()方法设置返回的Range对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7900702/