Excel 基于单元格值隐藏图纸上的多行
我正在尝试使用Excel 2013在单元格为某个值时隐藏和取消隐藏行 这是一种根据给出的答案进行扩展的形式 当C16=是时,隐藏行18:22 C16=无隐藏行时24:38 C16=空白时隐藏行18:38 当L43=是时,取消隐藏行43:68(如果不是是,则显示零) 我试过两种方法 第一:进入工作表-右上角下拉列表中的选定更改Excel 基于单元格值隐藏图纸上的多行,excel,vba,Excel,Vba,我正在尝试使用Excel 2013在单元格为某个值时隐藏和取消隐藏行 这是一种根据给出的答案进行扩展的形式 当C16=是时,隐藏行18:22 C16=无隐藏行时24:38 C16=空白时隐藏行18:38 当L43=是时,取消隐藏行43:68(如果不是是,则显示零) 我试过两种方法 第一:进入工作表-右上角下拉列表中的选定更改 Private Sub Worksheet_Change(ByVal Target As Range) Range("A18:A22").EntireRow.Hi
Private Sub Worksheet_Change(ByVal Target As Range)
Range("A18:A22").EntireRow.Hidden = (Range("$C$16").Value = "Yes")
Range("A24:A38").EntireRow.Hidden = (Range("$C$16").Value = "NO")
Range("A18:A38").EntireRow.Hidden = (Range("$C$16").Value = "")
Range("A43:A68").EntireRow.Hidden = (Range("$L$43").Value = "0")
End Sub
第二:这里的代码:
使用这两种方法,似乎只有一种变化在进行。所以单元格C16被更改,但这意味着范围L43被忽略
同样,当单元格为空时,它没有改变任何东西。它保持原样,没有按要求隐藏列。您的范围重叠,因此即使
C16=“Yes”
行C16=“”
也会覆盖并取消隐藏它L42
可能也是一个数字,当您将其与文本值进行比较时,请尝试使用以下数字。您的代码也将在工作表中的每一次更改上运行,因此,我们也将其更新为仅在C16
或L43
更改时运行
Private Sub Worksheet_Change(ByVal Target As Range)
With Me
If Not Intersect(Target, Union(.Range("C16"), .Range("L43"))) Is Nothing Then
.Range("A18:A38").EntireRow.Hidden = False
Select Case LCase(.Range("C16").Value2)
Case "yes"
.Range("A18:A22").EntireRow.Hidden = True
Case "no"
.Range("A24:A38").EntireRow.Hidden = True
Case Else
.Range("A18:A38").EntireRow.Hidden = True
End Select
.Range("A43:A68").EntireRow.Hidden = False
Select Case LCase(.Range("L43").Value2)
Case "yes"
.Range("A43:A68").EntireRow.Hidden = False
Case Else
.Range("A43:A68").EntireRow.Hidden = True
End Select
End If
End With
End Sub
评论后
我将从你的评论中把这一分为二。第一种方法是观察下拉列表,并根据单元格的变化执行。第二个将使用calculate事件进行更新。如果适用,将这些接头放入表中
Private Sub Worksheet_Change(ByVal Target As Range)
With Me
If Not Intersect(Target, Union(.Range("C16"), .Range("L43"))) Is Nothing Then
.Range("A18:A38").EntireRow.Hidden = False
Select Case LCase(.Range("C16").Value2)
Case "yes"
.Range("A18:A22").EntireRow.Hidden = True
Case "no"
.Range("A24:A38").EntireRow.Hidden = True
Case Else
.Range("A18:A38").EntireRow.Hidden = True
End Select
End If
End With
End Sub
您的范围重叠,因此即使
C16=“Yes”
行C16=”“
将覆盖它并取消隐藏它L42
可能也是一个数字,当您将其与文本值进行比较时,请尝试使用以下数字。您的代码也将在工作表中的每一次更改上运行,因此,我们也将其更新为仅在C16
或L43
更改时运行
Private Sub Worksheet_Change(ByVal Target As Range)
With Me
If Not Intersect(Target, Union(.Range("C16"), .Range("L43"))) Is Nothing Then
.Range("A18:A38").EntireRow.Hidden = False
Select Case LCase(.Range("C16").Value2)
Case "yes"
.Range("A18:A22").EntireRow.Hidden = True
Case "no"
.Range("A24:A38").EntireRow.Hidden = True
Case Else
.Range("A18:A38").EntireRow.Hidden = True
End Select
.Range("A43:A68").EntireRow.Hidden = False
Select Case LCase(.Range("L43").Value2)
Case "yes"
.Range("A43:A68").EntireRow.Hidden = False
Case Else
.Range("A43:A68").EntireRow.Hidden = True
End Select
End If
End With
End Sub
评论后
我将从你的评论中把这一分为二。第一种方法是观察下拉列表,并根据单元格的变化执行。第二个将使用calculate事件进行更新。如果适用,将这些接头放入表中
Private Sub Worksheet_Change(ByVal Target As Range)
With Me
If Not Intersect(Target, Union(.Range("C16"), .Range("L43"))) Is Nothing Then
.Range("A18:A38").EntireRow.Hidden = False
Select Case LCase(.Range("C16").Value2)
Case "yes"
.Range("A18:A22").EntireRow.Hidden = True
Case "no"
.Range("A24:A38").EntireRow.Hidden = True
Case Else
.Range("A18:A38").EntireRow.Hidden = True
End Select
End If
End With
End Sub
尝试: …虽然我不明白您想成为什么“0”。试试:
…虽然我不明白您希望成为“0”的内容。如果您使用的是
行
您不需要使用EntireRow
如果您使用的是行
您不需要使用EntireRow
,所以这个在未经测试的情况下运行得非常好,似乎是我的首选选项,因为我在模块中不需要任何东西。有一件事我搞砸了,那就是我的逻辑。根据公式更改单元格L43。因此,它从另一个工作表中查找数据,并将返回YES或0。是否可以对公式结果隐藏工作表。如果这是一种痛苦,我将创建一个新的下拉列表,并在工作表上进行更改?汤姆……这太不可思议了。非常感谢。是application.enableevents这一行允许这种情况发生吗?只是想了解它在做什么。应用程序.EnableEvents
正在阻止事件本身调用它并以递归结束。i、 e.计算调用计算事件。对事件的更改会导致计算,而计算又会调用事件等等。因此,在未经测试的情况下,此操作非常有效,似乎是我的首选选项,因为我不需要模块中的任何内容。有一件事我搞砸了,那就是我的逻辑。根据公式更改单元格L43。因此,它从另一个工作表中查找数据,并将返回YES或0。是否可以对公式结果隐藏工作表。如果这是一种痛苦,我将创建一个新的下拉列表,并在工作表上进行更改?汤姆……这太不可思议了。非常感谢。是application.enableevents这一行允许这种情况发生吗?只是想了解它在做什么。应用程序.EnableEvents
正在阻止事件本身调用它并以递归结束。i、 e.计算调用计算事件。事件的更改会导致计算,而计算又会调用事件,依此类推。