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.
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).
O código para esse exemplo é apresentado a seguir:
ao ler me surgiu uma duvida.Em ‘aplication.Enab…
esta como se fosse apenas uma informação , mas ela não deveria fazer uma função na macro ?
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
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”
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.
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?
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.
so para avisar!
em relação ao select case, refis todos os macros(rodada_1,rodada_2…) e deu certo, valeu!