我在工作表中用一行填充组合框,然后在组合框中选择该项目时,我希望它隐藏或取消隐藏该行。它适用于我的 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
注意:或者,您可以使用复选框来隐藏/取消隐藏列,或者通过输入框使用不同的列来隐藏/取消隐藏。
希望这对你有帮助。