2015-03-03 2 views
0

Когда я выбираю диапазон из трех ячеек, скажем, B3: B5, метод действует как ожидалось и отображает три сообщения с «3», «4» и «5», ,Метод Selection.SpecialCells() возвращает неожиданный диапазон (Excel VBA)

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

Проблема заключается в том, когда я выбираю только одну ячейку: в Selection.SpecialCells(xlCellTypeVisible) возвращает все видимые ячейки на листе, и начинается с ячейки A1.

Как заставить его возвращать только одну видимую ячейку в пределах одной выбранной ячейки? Почему возникает проблема?

Спасибо!

+0

вы можете проверить интервал выбора, и если есть только одна ячейка, используйте 'xlCellTypeLastCell' для каждого цикла –

ответ

3

Это будет выполнять правильное ограничение:

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

Причина возвращает все используемые ячейки на листе, что метод SpecialCells, как и многие другие методы в Excel, предполагает, что вы хотите used range of the worksheet, если ваш указанный диапазон только содержит одну ячейку.

0

устранить проблему с некорректным диапазоном при использовании «SpecialCells» просто поставить эту строку в код

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

Таким образом, Excell будет использовать этот метод только тогда, когда на самом деле Sellected области состоит из более чем одной клетки ,

Смежные вопросы