Lógica de Programação - VBA

Embed Size (px)

Citation preview

Lgica de Programao - VBA

Lgica de Programao - VBAEstruturas de ControleEstruturas de ControleAs estruturas de controle determinam o curso de aes de um algoritmo ou programa. A lgica do procedimento flui atravs das instrues da esquerda para a direita e de cima para baixo. As instrues de controle, ou seja, os comandos que controlam a tomada de decises e as iteraes podem alterar a ordem de execuo das instrues.

Estruturas de seleoAs instrues condicionais avaliam se uma condio verdadeira ou falsa, e em seguida especificam uma ou mais instrues a serem executadas, dependendo do resultado dessa avaliao.Comandos de seleo:if...then /if...then...else/elseif /select...case...else

Seleo Simples(If ... Then) testa uma condio nica e executa uma instruo ou um bloco de instrues.Sintaxe: IfcondioThenInstruesEnd If

ExemploO procedimento abaixo obtm dois valores numricos, efetua a soma e apresenta a mensagem "soma maior que dez", caso o resultado da adio seja maior que 10.

Sub Adio() Dim num1 As Integer, num2 As IntegerDim soma As Integernum1= InputBox("Informe o 1o. valor")num2 = InputBox("Informe o 2o. valor")soma = num1 + num2if(soma > 10)thenMsgBox "Soma maior que dez"end if End Sub

Seleo Composta(If Then Else) testa uma condio nica e executa um entre dois blocos de instrues.Sintaxe: IfcondioThen InstruesElse InstruesEnd IfExemploO procedimento a seguir efetua o clculo da mdia aritmtica das notas de trs provas de uma aluno e avalia a situao quanto aprovao.

Sub mediaProvas() Dim nt1 As single, nt2 As Single Dim nt3 As Single, media As Single nt1 = InputBox("Informe a 1a. nota") nt2 = InputBox("Informe a 2a. nota")nt3 = InputBox("Informe a 3a. nota")media = (nt1 + nt2 + nt3) / 3 if(media >= 6.0)then MsgBox "Aprovado"else MsgBox "Reprovado"end if End Sub

Seleo composta encadeada(If Then ElseIf) testa mais de uma condio e executa um dos vrios blocos de instrues.Sintaxe: IfcondioThenInstruesElseIfcondioThenInstrues. . .ElseInstruesEnd IfExemploO procedimento abaixo calcula e mostra o valor do bonus com base no cargo e salrio do funcionrio.

Sub mediaProvas() Dim cargo As IntegerDim salario As Currency, bonus As Currencysalario = InputBox("Informe o salario: ")cargo = InputBox("Informe o cargo: ")Ifcargo = 1Thenbonus = salario * 0.15ElseIfcargo = 2Thenbonus = salario * 0.10ElseIfcargo = 3Thenbonus = salario * 0.08Elsebonus = 0End IfMsgBox "Cargo: " & cargo & " Bonus: " & bonusEnd Sub

Nota: se cada instruoElseIftestar a mesma expresso com valores diferentes mais prtico utilizar a seleo de mltipla escolha como no exemplo da prxima seo.Seleo de mltipla escolha(Select Case) testa uma condio nica e executa um dos vrios blocos de instrues.

Sintaxe: Select Casevar(1)Case expr(2): instrues. . .Case Else: instruesEnd Select

(1)var = varivel(2)expr = expresso numrica ou de sequncia de caracteres.ExemploO procedimento abaixo calcula e mostra o valor do bonus com base no cargo e salrio do funcionrio. ( o mesmo exemplo da seo anterior apenas este apresenta mais opes de cargo e salrio.)Sub bonus()Dim cargo As IntegerDim salario As Currency, bonus As Currencysalario = InputBox("Informe o salario: ")cargo = InputBox("Informe o cargo: ")Select CasecargoCase 1: bonus = salario * 0.15Case 2: bonus = salario * 0.10Case 3: bonus = salario * 0.08Case 4, 5:bonus = salario * 0.05Case 6 To 8:bonus = salario * 0.01Case Is < 12:bonus = salario * 0.005Case Else: bonus = 0End SelectMsgBox ("Cargo: " & cargo & " Bonus: " & bonus)End SubA instruoCasepode avaliar valores separados por vrgula, sequncias de valores - de at - e comparar com outros valores como aparece no exemplo a instruoCase Is.Nota: Para melhor legibilidade, vale a pena usar a estruturaSelect Caseem lugar daIf ... Then ... ElseIfquando a instruoElseIfavaliar a mesma expresso vrias vezes.Estruturas de repetioPermitem a execuo de um grupo ou bloco de instrues repetidamente. As instrues podem ser repetidas at que uma condio sejafalsaou at que sejaverdadeira. Tambm hloopsque repetem instrues um nmero especfico de vezes ou em cada objeto de uma coleo.Do...Loop Faz umloopenquanto ou at que uma condio seja verdadeira (True).For...Next Utiliza um contador para executar instrues um determinado nmero de vezes.For Each...Next Repete um grupo de instrues para cada objeto em uma coleo.Repetio com teste no incioDo While ... Loop testa uma condio no incio doloope executa oloopenquanto a condio for verdadeira (True).

Sintaxe: Do WhilecondioInstruesLoopExemploO procedimento abaixo multiplica dois valores fornecidos pelo usurio e apresenta o resultado, repetindo esse processamento por tantas vezes quantas o usurio desejar.Sub multiplica()Dim produto As Integer, resp As Integer Dim salario As Currency, bonus As Currencyresp = vbYes Do while(resp = vbYes)valor1 = InputBox("1o. nmero")valor2 = InputBox("2o. nmero") produto = valor1 * valor2 MsgBox "Resultado: " & produto resp = MsgBox("Deseja continuar?", vbYesNo) Loop End SubA funo MsgBox, codificada em duas linhas neste procedimento, exibe na primeira o produto dos valores informados pelo usurio e na segunda mostra a mensagem "Deseja continuar?" e dois botes "Sim" e "No". A execuo s encerrada quando o usurio pressionar o boto "No".Repetio com teste no incioDo Until ... Loop testa uma condio no incio doloope executa oloopenquanto a condio for falsa (False).Sintaxe: Do UntilcondioInstruesLoopExemploO procedimento a seguir conta o nmero de vezes que ele executado pelo o usurio.

Sub conta()Dim soma As Integer resp = vbYes Do Untilresp = vbNosoma = soma + 1resp = MsgBox ("Deseja continuar?", vbYesNo)LoopMsgBox "Total = " & somaEnd Sub

O procedimento apresenta a caixa de mensagem com a informao: Deseja continuar? e dois botes diferenciados pelos textos: "Sim" e "No". O sistema adiciona uma unidade na varivel soma e volta a exibir a caixa de mensagem at que o usurio clique no boto "No", quando ento a funo aps o comando Loop mostrar o contedo da varivel soma.Repetio com teste no finalDo ... Loop While testa uma condio no final doloope continua a execuo enquanto a condio for verdadeira (True).Sintaxe: DoInstruesLoop Whilecondio

ExemploO procedimento abaixo converte para o sistema binrio um nmero decimal informado pelo usurio.

Sub converte()Dim dec As Integer, bin As StringDim resto As Integer, sResto As Stringdec = InputBox("Informe um num.", , 19)Doresto = dec Mod 2' retorna o resto da divisosResto = CStr(resto)' converte o resto para o tipo stringbin = sResto + bin' concatena o resto com o contedo de bindec = dec \ 2' retorna o quociente inteiro da divisoLoop Whiledec > 0MsgBox "Valor em binrio: " & binEnd Sub

O usurio informa um nmero decimal na caixa de entrada, caso no queira o valor default 19 sugerido e o sistema o converte para o binrio correspondente. A execuo do loop tem lugar enquanto a varivel dec for maior que zero.Repetio com teste no finalDo ... Loop Until testa uma condio no final doloope continua a execuo enquanto a condio for falsa (False).Sintaxe: DoInstruesLoop Untilcondio

ExemploO procedimento abaixo calcula e mostra o fatorial de um nmero fornecido pelo usurio.

Sub fatorial()Dim num As Integer, fat As Integer, i As Integernum = InputBox("Informe um num.", , 5)fat = 1: i = 1Dofat = fat * ii = i + 1Loop Untili > numMsgBox "Fatorial de " & num & ": " & fatEnd Sub

A execuo prossegue at que a varivel ndice i for maior do que a varivel num, contedo informado na caixa de entrada.Repetio com varivel de controleFor ... Next executa as instrues doloopenquanto a varivel contadora no atingir o valor especificado.Sintaxe: Forvar = inicialTofinal [Steppasso]InstruesNextvarExemploO procedimento abaixo efetua a soma dos nmeros pares at 10.

Sub soma()Dim total As Integer, j As IntegerForj = 2To10Step2total = total + jNextjMsgBox "O total " & totalEnd Sub

A variveljrecebe o valor inicial 2 e a cadaloop incrementada de 2 unidades at atingir o valor final 10. O comandoStep opcional e se ele no for especificado assumido o valor padro 1.Saindo deloopse procedimentosAs instruoExitpermite abandonar uma estrutura de controle. Apesar dessa instruo ser conveniente, deve-se restringir seu uso uma vez que o excesso de sua utilizao pode dificultar a leitura e a depurao do cdigo.Para sair diretamente de uma estrutura de repetioFor, utiliza-se a instruoExit Fore para sair diretamente de um repetioDousa-se a instruoExit Do.As instruesExit SubeExit Functionpodem ser usadas para abandonar procedimento e funo.