如果不是VBA问题

如果不是VBA问题,vba,excel,Vba,Excel,我的问题是我的代码没有拾取“Medium”变量 您能告诉我它有什么问题吗(“标准”应隐藏行,“中等”应隐藏行,但取消隐藏Sheet2,High应再次隐藏行,但取消隐藏Sheet2,如果(B24)为空,则应隐藏行和Sheet2: Private Sub Worksheet_Change(ByVal Target As Range) If Range("B24").Value = "Standard" Then Sheets("Sheet2").Visible = False End

我的问题是我的代码没有拾取“Medium”变量

您能告诉我它有什么问题吗(“标准”应隐藏行,“中等”应隐藏行,但取消隐藏Sheet2,High应再次隐藏行,但取消隐藏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

如果,您显然缺少一个
,并且您的代码不应该工作。这是格式化时的情况:

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
您可以更进一步,在选择的案例之前写入
行(“29:47”).EntireRow.Hidden=True
,并从案例中删除这一行,从而遵循请勿重复自己的原则。但在这种情况下,可能不需要这样做

如果要添加第二个范围,可以执行以下操作:

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

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

太好了,谢谢你。它工作得很好。PS.@Vityta你能告诉我什么是开发VBA(Microsoft网站?)知识的最佳书籍/资源吗?@WestRay-欢迎:)可能是关于书籍——约翰·沃肯巴赫和汤姆·乌蒂斯(见亚马逊网站),关于网站——cpearson.com。非常感谢!我马上去看看。谢谢:)快速提问:如果我想添加另一个具有类似标准的精选案例范围(“B26”),我会怎么做?@WestRay-请参阅编辑,但这实际上取决于您的具体操作。
Select Case True    
    Case Range("B24") = "Standard"      
    Case Range("B26") = "Medium"        
End Select