Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA根据特定答案隐藏/取消隐藏行_Excel_Vba - Fatal编程技术网

Excel VBA根据特定答案隐藏/取消隐藏行

Excel VBA根据特定答案隐藏/取消隐藏行,excel,vba,Excel,Vba,我正在尝试根据特定单元格值隐藏/取消隐藏行。到目前为止,我的代码有效,如下所示: 但是,我也尝试在yes-no行之间显示行。例如,第11-15行的开头如图所示。第15行有是或否答案。选择“是”后,我需要显示16-20。但到目前为止,我只能显示20列8是选择是/否,列11是偏移量,列12当前包含要跳到的数字。。。所以第15行第12列包含20。。。但我需要16-20岁。我如何解决这个问题?多谢各位 Private Sub Worksheet_Change(ByVal Target As Range)

我正在尝试根据特定单元格值隐藏/取消隐藏行。到目前为止,我的代码有效,如下所示: 但是,我也尝试在yes-no行之间显示行。例如,第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

最简单的方法是使用循环。您要做的是隐藏循环中的每一行,例如,此循环将隐藏第1-3行

For i=1 to 3
    Rows(i).EntireRow.Hidden = True
Next
如果我正确理解您的设置,则第8列包含“是/否”。第11列包含开始取消隐藏行的行偏移量。第12列说明停止取消隐藏行的位置

我将使用以下符号表示单元格地址行、列

回到您的示例中,如果15,8表示是,则取消隐藏第16,17,18,19,20行。这意味着15,11将包含1,因为到达第16行的偏移量是当前_行+1,其中当前行是15,单元格15,12包含20,因为它是最后一行要跳到。只需使用单元格15,11中的值作为循环的开始,使用单元格15,12中的值作为停止值

专用子工作表\u ChangeByVal目标作为范围 '定义了一些常量 常数=8 常量偏移量=11 常数iSKIP_至_COL=12 如果Target.Count>1,则 对于目标中的每个cel 调用工作表\u Changecel 下一个细胞 如果结束 ElseIf Target.Count=1,则 “我不知道这是怎么回事,所以我把它忘了 如果Target.Column=8,则 如果LCaseTarget.Value=LCaseTarget.Offset,则为3 CellsTarget.Offset,4,1.EntireRow.Hidden=False 其他的 CellsTarget.Offset,4,1.EntireRow.Hidden=True 如果结束 如果Target.Column=iYES\u NO\u COL,则 '获取当前行+偏移单元格中的值 我的开始=Target.Row+CellsTarget.Row,iOFFSET\u COL.Value '将值从SKIP_到_列 my_stop=CellsTarget.Row,iSKIP_TO_COL.Value '此时目标应仅为一个单元格,请查看 '包含“否”一词 如果StrCompTrimLCaseTarget.Value,no=0,则 '隐藏起始值和停止值之间的所有行 因为我=我的_开始我的陀螺 Rowsi.EntireRow.Hidden=True 下一个 如果StrCompTrimLCaseTarget.Value为是,则为0 '取消隐藏起始值和停止值之间的所有行 因为我=我的_开始我的陀螺 Rowsi.EntireRow.Hidden=False 下一个 如果结束 如果结束 端接头