Я заполняю комбинированный список строк на листе, а затем, когда выбираю этот элемент в комбинированном списке, я хочу, чтобы он скрывал или отображал эту строку. Он работает с моими инструкциями case, но как я могу сделать это проще, потому что существует слишком много операторов case, которые нужно добавить, когда диапазон равен F:BO?

 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

2 ответа2

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
0

Я хотел бы предложить вам гибкое решение, которое работает на Долине 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

NB. В качестве альтернативы вы можете использовать флажок для скрытия / отображения столбцов или через InputBox вы можете использовать различные столбцы для скрытия / отображения.

Надеюсь, это поможет вам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .