Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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 基于单元格值隐藏图纸上的多行_Excel_Vba - Fatal编程技术网

Excel 基于单元格值隐藏图纸上的多行

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

我正在尝试使用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.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.计算调用计算事件。事件的更改会导致计算,而计算又会调用事件,依此类推。