|
八楼的代码前半部分,有四个if,只有三个endif。为什么还能正常运行。哈。不懂啊。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range
With Target
If .Count = 1 And .Column = 1 Then '选中一个单元格,且在第一列时
If Not .Offset(1, 0).EntireRow.Hidden And .Value <> "" Then '选中的下面一个单元格为显示,且但前单元格不为空白时
Set c = .End(xlDown) '设置c为但前单元格向下的不为空的单元格,类似于按Ctrl+向下箭头
If c.Row = 65536 Then Set c = [b65536].End(xlUp).Offset(1, 0) '如果这个单元格为最后一行,设置它为B列最后一个
'非空单元格的下一个
If c.Row > .Row Then
Range(.Offset(1, 0), c.Offset(-1, 0)).EntireRow.Hidden = True '空白区域对应的行隐藏
End If
Else
Set c = .Offset(1, 0) '如果下面一个单元格是隐藏的,则执行下面代码
Do
c.EntireRow.Hidden = False '从下一个单元格一直往下循环,直到有个单元格不为隐藏的
Set c = c.Offset(1, 0)
Loop Until Not c.EntireRow.Hidden
End If
End If '针对一个单元格一个单元格的选择
If .Column = 1 And .Count = 65536 Then '选中A列时全部显示
Columns(1).EntireRow.Hidden = False
ElseIf .Column = 2 And .Count = 65536 Then '选中B列时,所有a列空白单元格隐藏
Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End If
End With
End Sub |
|