我的问题是我的代码没有选择“Medium”变量
If Range("B24").Value = "Medium" Then
Sheets("Sheet2").Visible = True
你能告诉我有什么问题吗(“标准”应该显示行,“中”应该隐藏它们但取消隐藏Sheet2,高再次保持行隐藏但取消隐藏Sheet2,如果(B24)为空它应该保留行和 Sheet2 隐藏:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("B24").Value = "Standard" Then
Sheets("Sheet2").Visible = False
End If
If Range("B24").Value = "Medium" Then
Sheets("Sheet2").Visible = True
End If
If Range("B24").Value = "High" Then
Sheets("Sheet2").Visible = True
End If
Else
Sheets("Sheet2").Visible = False
End If
If Range("B24").Value = "Standard" Then
Rows("29:47").EntireRow.Hidden = False
Else
Rows("29:47").EntireRow.Hidden = True
End If
End Sub
最佳答案
您显然缺少一个If
,并且您的代码不应该工作。格式化后的样子如下:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("B24").Value = "Standard" Then
Sheets("Sheet2").Visible = False
End If
If Range("B24").Value = "Medium" Then
Sheets("Sheet2").Visible = True
End If
If Range("B24").Value = "High" Then
Sheets("Sheet2").Visible = True
End If
'Is this Else an IF?
Else
Sheets("Sheet2").Visible = False
End If
If Range("B24").Value = "Standard" Then
Rows("29:47").EntireRow.Hidden = False
Else
Rows("29:47").EntireRow.Hidden = True
End If
End Sub
如果省略 If-Else,使用 Select-Case 语句的代码看起来会更好一些:
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Range("B24")
Case "Standard"
Sheets("Sheet2").Visible = False
Rows("29:47").EntireRow.Hidden = False
Case "Medium"
Sheets("Sheet2").Visible = True
Rows("29:47").EntireRow.Hidden = True
Case "High"
Sheets("Sheet2").Visible = True
Rows("29:47").EntireRow.Hidden = True
Case Else
Sheets("Sheet2").Visible = False
Rows("29:47").EntireRow.Hidden = True
End Select
End Sub
您可能可以更进一步,在 select case 之前编写 Rows("29:47").EntireRow.Hidden = True
并从 case 中删除这一行,从而遵循 Do-不重复原则。但在这种情况下可能不需要。
如果您想添加第二个范围,可以这样做:
Select Case True
Case Range("B24") = "Standard"
Case Range("B26") = "Medium"
End Select
但是,它只会计算一次,因此如果两者都为 true,B26
就不会发生。
关于vba - 否则 VBA 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47529157/