Selection.SpecialCells()方法返回意外范围(Excel VBA)

时间:2015-03-03 12:55:57

标签: vba excel-vba excel

当我选择B3:B5这三个单元格的范围时,该方法按预期运行并显示三条消息,其中包含" 3"," 4"和" 5"。

Sub visTest()
    Dim c As Range
    For Each c In Selection.SpecialCells(xlCellTypeVisible)
        MsgBox c.row
    Next c
End Sub

问题是当我只选择一个单元格时: Selection.SpecialCells(xlCellTypeVisible)返回工作表上的所有可见单元格,并从单元格A1开始。

如何让它只返回一个选定单元格中的一个可见单元格? 为什么会出现问题?

谢谢!

3 个答案:

答案 0 :(得分:4)

这将执行正确的限制:

Sub visTest()
    Dim c As Range
    For Each c In Intersect(Selection, Selection.SpecialCells(xlCellTypeVisible))
        MsgBox c.Row
    Next c
End Sub

答案 1 :(得分:1)

它返回工作表上所有已使用单元格的原因是,如果您指定的范围只包含一个单元格,那么,与Excel中的许多其他方法一样,SpecialCells方法假定您需要used range of the worksheet

答案 2 :(得分:0)

使用" specialCells"消除范围不正确的问题把这一行放到代码

If Selection.Cells.Count > 1 Then Selection.SpecialCells(xlCellTypeVisible).Select End If

这样,只有当实际选择的区域由多个单元格组成时,excell才会使用此方法。