【问题标题】:Excel macro clicking on a cell unhides the row below单击单元格的 Excel 宏取消隐藏下面的行
【发布时间】:2018-12-18 01:09:25
【问题描述】:

我正在创建一个默认隐藏某些行的表。在一列中,我有一个名为“添加行”的单元格。单击此单元格会运行一个宏,该宏会取消隐藏下面的行。例如,假设表格中的每 10 行都被隐藏(第 10、20、30 行等被隐藏)。当我单击单元格 B9 时,我希望取消隐藏第 10 行。然后,当我单击单元格 B19 时,我希望取消隐藏第 20 行等。 我为每个单元格生成了以下代码:

If Not Intersect(Target, Range("B9")) Is Nothing Then  
  Rows("10").Select  
  Selection.EntireRow.Hidden = False  
  Range("A10").Select  
End If  

问题是我必须重复数千次,所以这个过程变得太大,Excel 不执行它。 所以,我想知道是否可以制作一个宏,仅取消隐藏单击的单元格下方的行。有没有办法点击单元格 B(n-1) 并取消隐藏行 n?我希望有人可以帮忙处理这段代码! :)

【问题讨论】:

  • Selection.offset 可能会让您入门

标签: vba excel


【解决方案1】:

下面怎么样,它会检查下面的行是否被隐藏,如果是,它会在你双击B列上面的单元格后取消隐藏:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 2 Then
    If Rows(Target.Row + 1).EntireRow.Hidden Then Rows(Target.Row + 1).EntireRow.Hidden = False
End If
End Sub

更新:

我之前的答案可以通过双击来工作,但下面的答案将通过单击您要取消隐藏的行上方的单元格来工作:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
    If Rows(Target.Row + 1).EntireRow.Hidden Then Rows(Target.Row + 1).EntireRow.Hidden = False
End If
End Sub

【讨论】:

  • 非常感谢,Xabier!你的回答很有帮助!
【解决方案2】:

如果我理解正确,这应该可以解决问题:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Row Mod 10 = 9 Then  'check if the remainder when dividing the row number by 10 is equal to nine
        Rows(Target.Row + 1).Hidden = False 'unhide row below selection
    End If
End Sub

【讨论】:

  • 非常感谢 Franz 的这个想法!
【解决方案3】:

我想公布我在 Xabier 和 Franz 的帮助下得到的结果。效果很好!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim N As Integer 'how much times the pattern of rows occurs
Dim A As Integer 'which rows to be hidden

'To unhide rows
'The step to repeat the pattern is 16

For N = 1 To 100
    For A = 16 To 24
        If Target.COLUMN = 11 And Target.Row = A + (N - 1) * 16 Then
            If Rows(Target.Row + 1).EntireRow.Hidden Then Rows(Target.Row + 1).EntireRow.Hidden = False
            If Rows(Target.Row + 1).EntireRow.Hidden = False Then Cells(Target.Row + 1, 1).Select
        End If
    Next A
Next N
End Sub

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多