我试图根据特定的单元格值隐藏/取消隐藏行。到目前为止我的代码工作,如下: 但是,我也试图在“是”“否”行之间显示行。例如,第11-15行开始如图所示。第15行有“是”或“否”的答案。选择“是”后,我需要显示16-20。但截至目前,我只能显示20(第8列是选择是/否,第11列是偏移,第12列目前包含要跳过的数字......所以第15行第12列包含“20”..但是我需要16-20岁。我该如何解决这个问题?谢谢
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then
For Each cel In Target
Call Worksheet_Change(cel)
Next cel
End If
If Target.Column = 8 Then
If LCase(Target.Value) = LCase(Target.Offset(, 3)) Then
Cells(Target.Offset(, 4), 1).EntireRow.Hidden = False
Else
Cells(Target.Offset(, 4), 1).EntireRow.Hidden = True
End If: End If
End Sub
答案 0 :(得分:0)
最简单的方法是使用循环。你想要做的是隐藏循环中的每一行,例如这个循环将隐藏行1-3
For i=1 to 3
Rows(i).EntireRow.Hidden = True
Next
如果我正确地进行了设置,则第8列包含"是/否"。第11列包含一个行偏移量以启动(un)隐藏行。第12列告诉停止(取消)隐藏行的位置。
我将使用以下符号表示单元格地址(行,列)
如果(15,8)说"是"请回到您的示例然后你取消隐藏第16,17,18,19行, 20 。这意味着(15,11)将包含 1 ,因为到达第16行的偏移量是current_row + 1,其中当前行 15 cell (15,12)包含 20 ,因为它是要跳到的最后一行。只需使用单元格(15,11)中的值作为循环的开始,将单元格(15,12)中的值作为停止值
Private Sub Worksheet_Change(ByVal Target As Range)
'defines some constants
Const iYES_NO_COL = 8
Const iOFFSET_COL = 11
Const iSKIP_TO_COL = 12
If Target.Count > 1 Then
For Each cel In Target
Call Worksheet_Change(cel)
Next cel
End If
ElseIf Target.Count = 1 Then
'im not sure what this does so i left it
If Target.Column = 8 Then
If LCase(Target.Value) = LCase(Target.Offset(, 3)) Then
Cells(Target.Offset(, 4), 1).EntireRow.Hidden = False
Else
Cells(Target.Offset(, 4), 1).EntireRow.Hidden = True
End If
If (Target.Column = iYES_NO_COL) Then
' takes the current row + the value in the offset cell
my_start = Target.Row + Cells(Target.Row, iOFFSET_COL).Value
' takes the value from the SKIP_TO_COL
my_stop = Cells(Target.Row, iSKIP_TO_COL).Value
'target should be only one cell at this point, see if it
'contains the word no
If (StrComp(Trim(LCase(Target.Value)), "no") = 0) Then
'hides all the rows between the start and stop value
For i = my_start To mystop
Rows(i).EntireRow.Hidden = True
Next
ElseIf (StrComp(Trim(LCase(Target.Value)), "yes") = 0) Then
'unhides all the rows between the start and stop value
For i = my_start To mystop
Rows(i).EntireRow.Hidden = False
Next
End If
End If
End Sub