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