如果其他VBA问题

时间:2017-11-28 10:23:53

标签: excel vba excel-vba

我的问题是我的代码没有选择“中”变量

If Range("B24").Value = "Medium" Then
Sheets("Sheet2").Visible = True

你可以告诉它有什么问题(“标准”应该发现行,“中”应该隐藏它们但是取消隐藏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

1 个答案:

答案 0 :(得分:4)

您显然错过了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并从案例中删除这一行,从而遵循Do-Not-Repeat-Yourself原则。但在这种情况下,可能不需要它。

如果你想添加第二个范围,可以这样:

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

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