如果其他VBA问题

我的问题是,我的代码不拿起“中”variables

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 

你可以更进一步,通过编写Rows("29:47").EntireRow.Hidden = True在select案例之前,从案例中删除这条线,从而遵循Do-Not-Repeat-Yourself原则。 但在这种情况下,可能不需要。

如果你想添加第二个范围,这样的事情是可能的:

 Select Case True Case Range("B24") = "Standard" Case Range("B26") = "Medium" End Select 

但是,它只会评估一次,所以如果两者都是真的, B26是不会发生的。