【问题标题】:hide rows with double click双击隐藏行
【发布时间】:2023-01-16 21:48:14
【问题描述】:

在下面的示例中,我发现双击可以在 Excel 中隐藏/打开完整的行。

它适用于几行,但如果我想为 100 行执行此操作,那将是一项糟糕的工作。

是否有可能使它对代码更友好?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address(0, 0) = "A9" Then
    Cancel = True
    Rows("10:15").Hidden = Not Rows("10:15").Hidden
End If
If Target.Address(0, 0) = "A16" Then
    Cancel = True
    Rows("17:22").Hidden = Not Rows("17:22").Hidden
End If
If Target.Address(0, 0) = "A23" Then
    Cancel = True
    Rows("24:29").Hidden = Not Rows("24:29").Hidden
End If
If Target.Address(0, 0) = "A30" Then
    Cancel = True
    Rows("31:36").Hidden = Not Rows("31:36").Hidden
End If
If Target.Address(0, 0) = "A37" Then
    Cancel = True
    Rows("38:43").Hidden = Not Rows("38:43").Hidden
End If
If Target.Address(0, 0) = "A44" Then
    Cancel = True
    Rows("45:50").Hidden = Not Rows("45:50").Hidden
End If

【问题讨论】:

  • 使用宏录制器。选择那 100 行,隐藏它们并调整记录器的代码。另外,考虑使用Outline (group) data in a worksheet 创建后,您可以一次展开/折叠所有内容。

标签: excel vba


【解决方案1】:

尝试这个:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column <> 1 Then Exit Sub
    Dim r As Long
    r = Target.Row
    If (r - 2) Mod 7 = 0 And r > 2 Then
        Rows(r + 1).Resize(6).Hidden = Not (Rows(r + 1).Resize(6).Hidden)
        Cancel = True
    End If
End Sub

【讨论】:

    【解决方案2】:

    您可以使用此代码

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Row < 9 then Exit Sub
    If (Target.Row - 2) Mod 7 = 0 Then  'e.g. 9, 16, 23, 30
        hideRows Target.Row + 1
    End If
    End Sub
    
    
    Private Sub hideRows(startRow As Long)
    
    With Me.Rows(startRow).Resize(6)
        .Hidden = Not .Hidden
    End With
    
    End Sub
    

    @foxfires 评论后更新: 如果您喜欢展开/折叠的想法,您可以使用以下代码:

    Public Sub groupRows(ws As Worksheet)
    
    Dim c As Range
    Set c = ws.Cells(9, 1)
    
    While LenB(c.Text) > 0
        c.Offset(1).Resize(6).EntireRow.Group
        Set c = c.Offset(7)
    Wend
    
    With ws.Outline
        .SummaryRow = xlSummaryAbove
        .ShowLevels 1
    End With
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 2019-06-23
      • 1970-01-01
      相关资源
      最近更新 更多