Excel VBA 用更好的替代方案取代无休止的案例陈述

Excel VBA 用更好的替代方案取代无休止的案例陈述

我在工作表中用一行填充组合框,然后在组合框中选择该项目时,我希望它隐藏或取消隐藏该行。它适用于我的 case 语句,但我如何才能更简单地做到这一点,因为当范围是 F:BO 时,有太多的 case 语句需要添加?

 Dim pick1 As String
    pick1 = UserForm1.ComboBox1.Value

Application.Columns("F:BO").Select
Application.Selection.EntireColumn.Hidden = True

         Select Case pick1
            Case Sheets(1).Range("F6").Value
                Application.Columns("F").Select
                Application.Selection.EntireColumn.Hidden = False
            Case Sheets(1).Range("G6").Value
                Application.Columns("G").Select
                Application.Selection.EntireColumn.Hidden = False
            Case Sheets(1).Range("H6").Value
                Application.Columns("H").Select
                Application.Selection.EntireColumn.Hidden = False
            Case Sheets(1).Range("I6").Value
                Application.Columns("I").Select
                Application.Selection.EntireColumn.Hidden = False
            Case Sheets(1).Range("J6").Value
                Application.Columns("J").Select
                Application.Selection.EntireColumn.Hidden = False

            Case Else
                Application.Columns("F:BO").Select
                Application.Selection.EntireColumn.Hidden = False

       End Select
    End Sub

答案1

使用工作表函数 MATCH 找到正确的列,然后使用得到的列号取消隐藏。

还要注意,避免使用.Select它,因为很少需要它并且只会减慢代码速度:

Dim pick1 As String
Dim ColNum As Long
ColNum = 0

pick1 = UserForm1.ComboBox1.Value
With Worksheets("Sheet1") 'change to your sheet
    .Columns("F:BO").Hidden = True
    On Error Resume Next
        ColNum = Application.WorksheetFunction.Match(pick1, .Range("6:6"), 0)
    On Error GoTo 0

    If ColNum = 0 Then
        .Columns("F:BO").Hidden = False
    Else
        .Columns(ColNum).Hidden = False
    End If
End With

答案2

我想向您推荐一种灵活的解决方案,该解决方案适用于 DropDown 的值。只需在任意位置(例如在 B3 中)创建一个下拉框,然后为其添加两个值 Yes 和 No。然后使用下面写的代码。

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Column = 2 And Target.Row = 3 And Target.Value = "Yes" Then

        Application.Columns("F:BO").Select
        Application.Selection.EntireColumn.Hidden = True

    Elseif Target.Column = 2 And Target.Row = 3 And Target.Value = "No" Then

        Application.Columns("F:BO").Select
        Application.Selection.EntireColumn.Hidden = False

    End If

End Sub

注意:或者,您可以使用复选框来隐藏/取消隐藏列,或者通过输入框使用不同的列来隐藏/取消隐藏。

希望这对你有帮助。

相关内容