我正在尝试使用Excel 2013在单元格为某个值时隐藏和取消隐藏行。
此表格应根据给出的答案进行扩展。
当C16 = YES时,隐藏18:22行
如果C16 =否,则隐藏24:38行
当C16 =空白时,隐藏18:38行
当L43 = YES时,取消隐藏第43:68行(如果不是,则显示零)
我尝试了2种方法。
首先:进入工作表-在右上角的下拉列表中选择更改
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
第二:这里的代码:
Unhide rows based on cell value
使用这两种方法,似乎只有一项更改在进行。因此更改了单元格C16,但这意味着范围L43被忽略了
当单元格为空白时,它也没有任何改变。它保持原样,并且没有按要求隐藏列。
答案 0 :(得分:3)
您的范围重叠,因此即使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
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
With Me
.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 With
Application.EnableEvents = True
End Sub
答案 1 :(得分:2)
尝试:
With Worksheets("Sheet1")
.Rows("18:68").EntireRow.Hidden = False
opt = UCase(.Range("C16").Value)
Select Case opt
Case "YES"
Rows("18:22").EntireRow.Hidden = True
Case "NO"
Rows("24:38").EntireRow.Hidden = True
Case ""
Rows("18:38").EntireRow.Hidden = True
Case Else
MsgBox "Invalid option in cell C16."
End Select
If UCase(.Range("L43").Value) = "Yes" Then
Rows("43:68").EntireRow.Hidden = True
Else
MsgBox "Invalid option in cell L43."
End Select
End With
...尽管我不明白您想要成为'0'的原因。