Excel VBA Substituir instruções de caso infinitas com melhor alternativa

0

Estou preenchendo uma caixa de combinação com uma linha na planilha e, ao escolher esse item na caixa de combinação, eu quero ocultar ou exibir essa linha. Ele funciona com minhas declarações de caso, mas como posso fazer isso mais simples porque existem muitas instruções de caso para adicionar quando o intervalo é 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
    
por David 18.01.2018 / 23:28

2 respostas

1

Use a função de planilha MATCH para encontrar a coluna correta e, em seguida, use o número da coluna resultante para exibir.

Além disso, uma observação, evite o uso de .Select , que raramente é necessário e só retarda o código:

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
    
por 19.01.2018 / 00:29
0

Eu gostaria de sugerir-lhe uma solução flexível que funciona no vale do DropDown. Basta fazer uma caixa suspensa em qualquer lugar como, por exemplo, em B3 e adicionar dois valores a ela Sim & Não. Em seguida, use o código abaixo escrito.

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: Como alternativa, você pode usar a Caixa de seleção para ocultar / exibir as colunas ou, através da caixa de entrada, usar colunas diferentes para ocultar / exibir.

Espero que isso ajude você.

    
por 19.01.2018 / 08:08