【发布时间】:2020-08-27 22:17:54
【问题描述】:
我试图根据另一个工作表中单元格的值隐藏另一个工作表中的一些行,我似乎有 VBA 代码在一定程度上工作,但似乎当我将值更改为“否”时隐藏某一行,然后为另一个单元格选择“否”,只有与第二个问题关联的行被隐藏,第一组行再次变得可见。有关上下文中的错误,请参见下文
Sub Worksheet_Change(ByVal Target As Range)
If (Target.Row = 12) And (Target.Column = 4) And (Target = "No") Then
Worksheets("Additional Procedures").Rows("13:16").EntireRow.Hidden = True
Else
Worksheets("Additional Procedures").Rows("13:16").EntireRow.Hidden = False
End If
If (Target.Row = 13) And (Target.Column = 4) And (Target = "No") Then
Worksheets("Additional Procedures").Rows("17:18").EntireRow.Hidden = True
Else
Worksheets("Additional Procedures").Rows("17:18").EntireRow.Hidden = False
End If
End Sub
因此,在上下文中,如果工作表单元格 D12 中的值为“否”,那么第 13:16 行将隐藏在工作表“附加程序”中但是那么如果我也有单元格 D13 的值为“否”,则第 13:16 行变为可见,第 17:18 行变为隐藏。如果单元格 D12 和 D13 的值都为“否”,我希望第 13:18 行保持隐藏状态
我还写了这段代码,仅当单元格 D21:D23 中的值都为“否”时才隐藏行 32:35。如果这是导致问题的原因,我已将其包括在内:
Dim Count As Integer
Dim Range As Variant
Count = 0
Range = Worksheets("Risk Assessment").Range("D21:D23")
For Each Cell In Range
If Cell = "No" Then
Count = Count + 1
End If
Next Cell
If Count = 3 Then
Sheets("Additional Procedures").Select
Worksheets("Additional Procedures").Rows("32:35").EntireRow.Hidden = True
Else
Worksheets("Additional Procedures").Rows("32:35").EntireRow.Hidden = False
End If
提前感谢你们提供的任何建议
【问题讨论】:
-
If (Target.Row = 12) And (Target.Column = 4) And (Target = "No") Then条件为真或假,并且相应地隐藏或显示行。意思是,如果 Target.Row 12 它们将被显示。如果行 12.,请尝试使用 Select 语句阻止Else运行 -
Risk Assessment是否与包含第一个代码的工作表相同,第二个代码应该何时运行(例如,当D21:D23中的单元格发生更改时?)? -
嗨 @VBasic2008
Risk Assessment与包含第一个代码的工作表相同,是的,它还包含第二个代码。Risk Assessment有一个问题表,根据在这些问题上选择的答案,我希望隐藏工作表Additional Procedures中的行。当且仅当 D21:D23 中的所有三个值都是“否”并且当且仅当满足该条件时,我希望第二个代码运行,然后应该隐藏Additional Procedures中的行 32:35。我会给你在下面写的代码 - 非常感谢! -
@Variatus 谢谢你,我没有想到这一点,但它是如此明显。我试试看,谢谢你的帮助!
-
@VBasic2008 我已经尝试过您的代码,但我似乎收到了一个编译错误,指出
Call HideRows是一个未定义的子函数或函数。有什么想法吗?