单击宏的Excel宏取消隐藏下面的行

时间:2018-07-10 08:51:46

标签: excel vba excel-vba

我正在创建一个表,其中默认情况下隐藏了某些行。在一个列中,我有一个名为“添加一行”的单元格。单击此单元格将运行一个宏,该宏取消隐藏下面的行。例如,假设表中的第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 ?我希望有人可以帮忙这个代码! :)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我想发布在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