Uso da Estrutura Select Case

Além da estrutura condicional If … EndIf, o VBA possui uma estrutura muito versátil e simples de ser usada em situações semelhantes a um “menu”, ou seja, um conjunto de opções, que quando uma delas for escolhida realiza-se uma sequência de comandos.
Mostrarei essa estrutura através de um exemplo que permite ao usuário digitar um valor na célula A2 da planilha Plan1 e de acordo com esse valor, uma macro (procedimento) será executada.

Text frame options

O código VBA deve ser digitado no container da Plan1. Depois de entrar no ambiente VBA (Alt+F11), dê um clique duplo na Plan1, que fica no Project Explorer (normalmente no lado esquerdo da tela).

Text frame options

O código para esse exemplo é apresentado a seguir:

Text frame options

7 comentários em “Uso da Estrutura Select Case”

  1. Carlos Cesar, fiz o código acima,mas não deu certo aparece uma mensagem:
    “Erro em tempo de execução ‘ -2147417848(80010108)’:
    o método ‘Hidden’ do objeto ‘Range’ falhou”
    então uma vez cliquei em Depurar e o excel fecha,na outra cliquei em Fim e então o excel trava.
    Talves seja por causa do tamanho do codigo ou da planilha(14 aonde ha 5 com utilização de macros leves e uma com este procedimento a baixo)?
    o codigo que fiz ficou assim:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 17 And Target.Column = 6 Then
    Select Case Target.Value
    Case 1
    Call rodada_1
    Case 2
    Call rodada_2
    Case 3
    Call rodada_3
    Case 4
    Call rodada_4
    Case 5
    Call rodada_5
    Case 6
    Call rodada_6
    Case 7
    Call rodada_7
    Case 8
    Call rodada_8
    Case 9
    Call rodada_9
    Case 10
    Call rodada_10
    Case 11
    Call rodada_11
    Case 12
    Call rodada_12
    Case 13
    Call rodada_13
    Case 14
    Call rodada_14
    Case 15
    Call rodada_15
    Case 16
    Call rodada_16
    Case 17
    Call rodada_17
    Case 18
    Call rodada_18
    Case 19
    Call rodada_19
    Case 20
    Call rodada_20
    Case 21
    Call rodada_21
    Case 22
    Call rodada_22
    Case 23
    Call rodada_23
    Case 24
    Call rodada_24
    Case 25
    Call rodada_25
    Case 26
    Call rodada_26
    Case 27
    Call rodada_27
    Case 28
    Call rodada_28
    Case 29
    Call rodada_29
    Case 30
    Call rodada_30
    Case 31
    Call rodada_31
    Case 32
    Call rodada_32
    Case 33
    Call rodada_33
    Case 34
    Call rodada_34
    Case 35
    Call rodada_35
    Case 36
    Call rodada_36
    Case 37
    Call rodada_37
    Case 38
    Call rodada_38
    Case Else
    Range(“f17”).Value = “17”
    End Select
    End If

    End Sub

  2. Fiz um comentario mas acho que me esqueci de enviar. Mas em fim, Carlos Cesar o código que fiz não deu certo, o codigo foi o seguinte:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 17 And Target.Column = 6 Then
    Select Case Target.Value
    Case 1
    Call rodada_1
    Case 2
    Call rodada_2
    Case 3
    Call rodada_3
    Case 4
    Call rodada_4
    Case 5
    Call rodada_5
    Case 6
    Call rodada_6
    Case 7
    Call rodada_7
    Case 8
    Call rodada_8
    Case 9
    Call rodada_9
    Case 10
    Call rodada_10
    Case 11
    Call rodada_11
    Case 12
    Call rodada_12
    Case 13
    Call rodada_13
    Case 14
    Call rodada_14
    Case 15
    Call rodada_15
    Case 16
    Call rodada_16
    Case 17
    Call rodada_17
    Case 18
    Call rodada_18
    Case 19
    Call rodada_19
    Case 20
    Call rodada_20
    Case 21
    Call rodada_21
    Case 22
    Call rodada_22
    Case 23
    Call rodada_23
    Case 24
    Call rodada_24
    Case 25
    Call rodada_25
    Case 26
    Call rodada_26
    Case 27
    Call rodada_27
    Case 28
    Call rodada_28
    Case 29
    Call rodada_29
    Case 30
    Call rodada_30
    Case 31
    Call rodada_31
    Case 32
    Call rodada_32
    Case 33
    Call rodada_33
    Case 34
    Call rodada_34
    Case 35
    Call rodada_35
    Case 36
    Call rodada_36
    Case 37
    Call rodada_37
    Case 38
    Call rodada_38
    Case Else
    Range(“f32”).Value = “erro”
    End Select
    End If

    End Sub
    ja fiz varias mudanças mas não da certo.Aparece a seguinte mensagem:
    “Erro em tempo de execução ‘-2147417848(80010108)’:

    O método ‘Hidden’do objeto ‘Range’ falho”

  3. Olá Ruan,

    Sobre a sua primeira questão, eu até já retirei do código as linhas que estavam comentadas: Application.enabled = False e Application.enabled = True.

    Elas não são relevantes para o exemplo. Use-as quando as macros que você executar gerarem algum evento que atrapalhará a execução do programa. Em síntese, normalmente queremos executar a macro_1, macro_2 sem interrupções, então ativamos esses comandos, onde o primeiro desativa os eventos e o último volta a ativá-los.

    Verifiquei o seu código e parece estar tudo certo. Em relação à mensagemde erro que está ocorrendo, acredito que possa ser de uma das macros que você desenvolveu rodada_1, rodada_2 etc.

  4. Carlos Cesar executei macro por macro e todas funcionaram.
    E ja que esse problema não deu para ser resolvido, eu queria saber se é possivel fazer aquele procv com imagens so que ao invez de imagens com vídeo, como se faz?

  5. O Excel não possui um controle nativo para lidar com vídeos. É possível fazer isso, mas dependerá da instalação de novos controles produzidos por terceiros, e o uso desses controles é definido pelos seus fabricantes.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.