|
Dim hbk As Boolean
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Rng As Range
Cancel = True
' 检查是否在第一行或第一列双击
If Target.Row = 1 Or Target.Column = 1 Then Exit Sub
' 如果 hbk 为 False,则表示第一次双击,清除所有单元格的边框
If Not hbk Then
hbk = True
UsedRange.Borders.LineStyle = 0
End If
' 检查目标单元格是否为空
If Target.Value = "" Then
' 如果目标单元格为空,找到相邻非空单元格
Set Rng = Target.End(xlDown)
' 如果找不到非空单元格,将 hbk 设置为 False,并选择下一列
If Rng.Value = "" Then
hbk = False
Set Rng = Target.Offset(0, 1)
Else
' 如果找到非空单元格,递归调用双击事件处理该单元格
Worksheet_BeforeDoubleClick Rng, True
End If
' 设置单元格范围的上边框样式
With Range(Target.Offset(-1), Rng.Offset(-1, -1)).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Color = RGB(255, 0, 0) ' 红色
.Weight = xlThick
End With
Else
' 如果目标单元格非空,设置目标单元格的左边框样式
With Target.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Color = RGB(255, 0, 0) ' 红色
.Weight = xlThick
End With
' 递归调用双击事件处理下一行的单元格
Worksheet_BeforeDoubleClick Target.Offset(1), True
End If
End Sub |
|