- Selecione um exemplo de caso
- Sintaxe de declaração de maiúsculas e minúsculas
- Selecione os critérios de caso
- Selecionar caso - Operador de texto e similar
- Case - dois pontos
- Seleção de caso - e / ou - várias condições
- Declarações de caso aninhadas
- Declaração de Caso vs. Declaração de If
- Exemplos de casos selecionados de VBA
- VBA Select Case no Access
No VBA, o Selecione a declaração do caso é uma alternativa para o Declaração If-Then, permitindo que você teste se as condições são atendidas, executando o código específico para cada condição. A instrução Select é preferível à instrução If quando há várias condições para processar.
Selecione um exemplo de caso
Este exemplo solicita ao usuário um YesNoCancel MessageBox e testa qual opção o usuário selecionou:
1234567891011121314 | Sub Select_Case_Yes_No_Cancel ()Dim nResult As VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Selecione Caso nResultCase vb SimMsgBox "Sim"Case vbNoMsgBox "Não"Case vbCancelMsgBox "Cancelar"End SelectEnd Sub |
Abaixo, escrevemos o equivalente usando uma declaração If. Você notará que a declaração Case Select envolve um pouco menos de digitação - esse benefício é ampliado ao testar vários critérios.
12345678910111213 | Sub If_Yes_No_Cancel ()Dim nResult As VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Se nResult = vb Sim, entãoMsgBox "Sim"ElseIf nResult = vbNo ThenMsgBox "Não"ElseIf nResult = vbCancel ThenMsgBox "Cancelar"Fim seEnd Sub |
Sintaxe de declaração de maiúsculas e minúsculas
A sintaxe da instrução Select Case é a seguinte:
12345678910 | Selecione o caso [expressão de teste]Caso [condição 1][Ação se a condição 1 for verdadeira]Caso [condição 2][Ação se a condição 2 for verdadeira]Caso [Condição n][Ação se a condição n for verdadeira]Case Else[Ação se nenhuma for verdadeira]End Select |
Onde:
[Expressão de teste] - É o valor a avaliar. Normalmente, é uma variável.
[Ação se a condição n for verdadeira] - É apenas o código a ser executado se a condição for atendida (assim como com uma instrução If)
[Condição n] - É a condição para testar. Existem muitas maneiras diferentes de testar as condições. Vamos discuti-los abaixo.
A instrução Case executará o código para a PRIMEIRA condição que for considerada TRUE. Se nenhuma condição for atendida, nenhum código será executado, a menos que a cláusula Else seja adicionada.
Selecione os critérios de caso
Selecionar casos pode ser usado para avaliar valores numéricos e texto. Primeiro, discutiremos como usar Selecionar casos para avaliar expressões numéricas.
Correspondência Exata - Números
Você pode testar facilmente uma correspondência exata com uma Declaração de Caso:
1 | Caso 10 |
ou adicione vírgulas para testar correspondências exatas com vários números:
1 | Caso 20, 30, 40 |
1234567891011121314 | Sub ExactMatch_Numbers ()Dim n As Integern = CInt (InputBox ("…"))Selecione o caso nCaso 10'Se n for 10, entãoCaso 20, 30, 40'Se n for 20/30/40 EntãoCase Else'Se n não for 20/10/30/40, entãoEnd SelectEnd Sub |
Gamas
Você pode testar se um número está dentro de uma faixa como esta:
1 | Caso 55 a 74 |
Este procedimento irá gerar uma pontuação de letras para um aluno com base em sua pontuação numérica:
12345678910111213141516171819202122 | Sub Calc_Grade ()Dim Score como inteiroDim LetterGrade As StringScore = InputBox ("Insira a pontuação do aluno")Selecione a pontuação do casoCaso 90 a 100LetterGrade = "A"Caso 80 a 90LetterGrade = "B"Caso 70 a 80LetterGrade = "C"Caso 60 a 70LetterGrade = "D"Case ElseLetterGrade = "F"End SelectMsgBox "A nota do aluno é:" & LetterGradeEnd Sub |
Você também pode testar intervalos com o Case Is
Selecione o caso é
1234 | O caso é <55'Fazer nadaCaso <= 74MsgBox "In Range" |
Lembre-se de que a instrução Case só executará código para SOMENTE a primeira correspondência.
Este procedimento irá calcular a nota de um aluno usando Case Is em vez de Case To.
12345678910111213141516171819202122 | Sub Select_Case_Is_Grade ()Dim Score como inteiroDim LetterGrade As StringScore = InputBox ("Insira a pontuação do aluno")Selecione a pontuação do casoCaso é> = 90LetterGrade = "A"Caso é> = 80LetterGrade = "B"Caso é> = 70LetterGrade = "C"Caso é> = 60LetterGrade = "D"Case ElseLetterGrade = "F"End SelectMsgBox "A nota do aluno é:" & LetterGradeEnd Sub |
Case Else
Você pode adicionar “Case Else” ao final de sua Declaração de Caso para fazer algo se nenhuma condição for atendida:
1 | Case Else |
Consulte o final do exemplo de código anterior para ver como Case Else pode ser usado.
Selecionar caso - Operador de texto e similar
Até agora, nossos exemplos de Select Case funcionaram apenas com números. Você também pode usar instruções Select Case com texto.
Correspondência Exata - Texto
Você pode testar se a expressão corresponde a uma frase exata como esta:
1 | Caixa "Beterraba" |
Ou use vírgulas para testar se a expressão corresponde exatamente a mais de uma frase:
1 | Estojo "Apple", "Banana", "Orange" |
Juntando tudo parece:
12345678910 | Sub ExactMatch_Food ()Selecione Case Range ("a1"). ValorCaixa "Beterraba"MsgBox "Vegetal"Estojo "Apple", "Banana", "Orange"MsgBox "Fruta"End SelectEnd Sub |
Maiúsculas e Minúsculas
Por padrão, VBA é sensível a maiúsculas e minúsculas. Isso significa que o VBA considera “Texto” diferente de “texto”. Para desativar a diferenciação de maiúsculas e minúsculas, adicione o texto de comparação de opções na parte superior do seu módulo:
1 | Texto de comparação de opções |
Este exemplo fará com que o Case Select não faça distinção entre maiúsculas e minúsculas ao trabalhar com texto:
123456789101112 | Texto de comparação de opçõesSub ExactMatch_Food ()Selecione Case Range ("a1"). ValorCaixa "Beterraba"MsgBox "Vegetal"Estojo "Apple", "Banana", "Orange"MsgBox "Fruta"End SelectEnd Sub |
Caso como
O operador semelhante permite que você faça comparações inexatas. Se o texto corresponder, Like retorna TRUE; se não corresponder, retorna FALSE. Isso torna o operador Like fácil de usar com as declarações If, no entanto, não funcionará tão facilmente com as declarações de caso.
Caso semelhante - um teste com falha
O código a seguir demonstra que o Operador Like não funciona com Select Case:
1234567891011 | Sub Select_Case_Like_DoesnotWork ()Dim word As Stringpalavra = "COCOA"Selecione a palavra do casoCase word2 como "* C * C *"MsgBox "Bom"Case ElseMsgBox "Não é bom"End SelectEnd Sub |
Caso semelhante - a maneira correta
No entanto, podemos adicionar a expressão TRUE para fazer a instrução Select funcionar com o operador similar:
1234567891011 | Sub Select_Case_Like_CorrectWay ()Dim word As Stringpalavra = "COCOA"Selecione Caso VerdadeiroPalavra do caso, como "* C * C *"MsgBox "Bom"Case ElseMsgBox "Não é bom"End SelectEnd Sub |
Case - dois pontos
Ao usar uma declaração de caso, você pode adicionar quantas linhas de código você gostaria de executar com cada condição. No entanto, se você só precisar executar uma linha de código. Você pode usar dois pontos (:) para escrever tudo na mesma linha.
Aqui está o mesmo exemplo de nota do aluno anterior, exceto pelo uso de dois pontos para encurtar o código:
1234567891011121314151617 | Sub Calc_Grade_colon ()Dim Score como inteiroDim LetterGrade As StringScore = InputBox ("Insira a pontuação do aluno")Selecione a pontuação do casoCaso 90 a 100: LetterGrade = "A"Caso 80 a 90: LetterGrade = "B"Caso 70 a 80: LetterGrade = "C"Caso 60 a 70: LetterGrade = "D"Caso contrário: LetterGrade = "F"End SelectMsgBox "A nota do aluno é:" & LetterGradeEnd Sub |
Seleção de caso - e / ou - várias condições
Você pode usar os operadores And / Or para testar critérios adicionais junto com o Select Case.
Neste exemplo, estamos usando um Select Case na variável ‘age’, mas também queremos testar o sexo. Portanto, usamos o operador And para realizar o teste mais complexo:
123456789101112131415161718 | Sub NestedSelectCase ()Dim sex As StringDim age como inteirosexo = "masculino" 'ou femininoidade = 15Selecione a idade do casoCaso é <20 e sexo = "masculino"Msgbox "Masculino com menos de 20 anos"Case Is <20 And sex = "female"Msgbox "Feminino menor de 20 anos"Caso é> = 20 E sexo = "masculino"Msgbox "Masculino acima de 20"Caso é> = 20 E sexo = "feminino"Msgbox "Feminino acima de 20"End SelectEnd Sub |
Declarações de caso aninhadas
Assim como as instruções If, você pode aninhar as instruções Case umas dentro das outras:
123456789101112131415161718192021222324 | Sub NestedSelectCase ()Dim sex As StringDim age como inteirosexo = "masculino" 'ou femininoidade = 15Selecione a idade do casoO caso é <20Selecione o sexo do casoCaso "masculino"MsgBox "Masculino com menos de 20 anos"Caso "feminino"MsgBox "Feminino menor de 20 anos"End SelectCaso é> = 20 E sexo = "feminino"Selecione o sexo do casoCaso "masculino"MsgBox "Masculino acima de 20"Caso "feminino"MsgBox "Feminino acima de 20"End SelectEnd SelectEnd Sub |
Declaração de Caso vs. Declaração de If
Quanto mais condições forem testadas, mais útil será a instrução Case em comparação com uma instrução If. Vejamos um exemplo.
Aqui está o código necessário para testar se o nome de uma planilha é igual a um conjunto de valores usando uma instrução If:
12345 | Se Nome = "Orçamento" Ou Nome = "Previsão" Ou Nome = "Trailing12" Ou _Name = "Flex" Or Name = "OtherRatios" Or Name = "Comparison" Ou _Name = "BudReview" Or Name = "P & L_Review" Or Name = "Other" Then'Faça alguma coisaFim se |
Aqui está o mesmo código usando uma instrução Select em vez disso:
12345 | Selecione o nome do casoCase "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _"Comparison", "BudReview", "P & L_Review", "Other"'Faça alguma coisaEnd Select |
Você pode ver que é muito mais fácil usar uma instrução Select neste cenário. É significativamente menos digitação e é muito mais fácil de ler.
Exemplos de casos selecionados de VBA
Ex 1. Função definida pelo usuário de declaração de caso (UDF)
Vamos replicar nosso exemplo de cálculo de nota acima e criar um UDF para calcular a pontuação de um aluno:
12345678910111213141516 | Função GetGrade (Score As Integer) As StringSelecione a pontuação do casoCaso 90 a 100GetGrade = "A"Caso 80 a 90GetGrade = "B"Caso 70 a 80GetGrade = "C"Caso 60 a 70GetGrade = "D"Case ElseGetGrade = "F"End SelectFunção Final |
Agora podemos usar a função GetGrade em nossa planilha do Excel para calcular rapidamente as notas dos alunos:
Ex 2. Nome da Folha de Teste / Declaração de Caso de Loop
Este código percorrerá todas as planilhas em uma pasta de trabalho, planilhas desprotegidas que atendem a certos critérios:
123456789101112 | Sub Case_UnProtectSheet ()Dim ws como planilhaPara cada ws nas planilhasSelecione Case ws.Name 'Lista de todas as planilhas com proporçõesCaso "Orçamento", "Previsão", "Trailing12", "Flex", "OtherRatios", _"Comparison", "BudReview", "P & L_Review", "Other"ws.UnprotectEnd SelectPróximo wsEnd Sub |
Ex 3. Selecione Caso - Valor da Célula
Este exemplo testará a pontuação de um aluno em uma célula, enviando a nota da letra diretamente para a célula à direita.
12345678910111213141516 | Sub TestCellValue ()Dim cell como rangeDefinir célula = intervalo ("C1")Selecione Case cell.ValueCaso 90 a 100célula. Deslocamento (0, 1) = "A"Caso 80 a 90célula. Deslocamento (0, 1) = "B"Caso 70 a 80célula. Deslocamento (0, 1) = "C"Caso 60 a 80célula. Deslocamento (0, 1) = "D"End SelectEnd Sub |
Ex 4. Selecione Caso - Datas
Este exemplo Case Select é uma função que testa em qual trimestre de uma data se enquadra.
123456789101112131415161718 | Sub TestDate ()MsgBox GetQuarter (CDate ("20/07/2019"))End SubFunção GetQuarter (dt As Date) As IntegerDim sht como planilhaSelecione o caso dtCaso CDate ("01/01/2019") Para CDate ("31/03/2019")GetQuarter = 1Caso CDate ("04/01/2019") Para CDate ("30/06/2019")GetQuarter = 2Caso CDate ("01/07/2019") Para CDate ("30/09/2019")GetQuarter = 3Caso CDate ("01/10/2019") Para CDate ("31/12/2019")GetQuarter = 4End SelectFunção Final |
Por ser uma função, você pode usá-la como uma função dentro do Excel:
Ex. 5 Verifique se o número é ímpar ou par
Este exemplo testa se um número é ímpar ou par.
123456789101112 | Sub CheckOddEven ()Dim n As Integern = InputBox ("Digite um número")Selecione Caso n Mod 2Caso 0MsgBox "O número é par."Caso 1MsgBox "O número é ímpar."End SelectEnd Sub |
Ex. 6 Teste se a data é dia da semana ou fim de semana
Esses exemplos testarão se uma data cai em um dia da semana ou em um fim de semana.
123456789101112131415161718192021 | Sub CheckWeekDay ()Dim dt As Datedt = CDate ("01/01/2020")Selecione Caso Dia da Semana (dt)Case vbMondayMsgBox "É segunda-feira"Case vb Terça-feiraMsgBox "É terça-feira"Caso vb quarta-feiraMsgBox "É quarta-feira"Case vbTh ThursdayMsgBox "É quinta-feira"Case vbFridayMsgBox "É sexta-feira"Case vbSaturdayMsgBox "É sábado"Case vbSundayMsgBox "É domingo"End SelectEnd Sub |
123456789101112 | Sub CheckWeekend ()Dim dt As Datedt = CDate ("01/01/2020")Selecione Caso Dia da Semana (dt)Case vbSaturday, vbSundayMsgBox "É um fim de semana"Case ElseMsgBox "Não é um fim de semana"End SelectEnd Sub |
VBA Select Case no Access
Todos os exemplos acima funcionam exatamente da mesma forma no Access VBA e no Excel VBA.
123456789101112131415161718192021 | Sub TestCellValue ()Dim dbs as DatabaseDim primeiro como RecordSetDefinir dbs = CurrentDBDefina rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Com o primeiro.MoveFirst.EditarSelecione Case rst.Fields ("City")Case "Austin".rst.Fields ("TelCode") = "512"Case "Chicago".rst.Fields ("TelCode") = "312"Case "New YorK".rst.Fields ("TelCode") = "1212"Case "San Fransisco".rst.Fields ("TelCode") = "415"End Select.AtualizarTerminar comFim Sus |