terça-feira, 23 de agosto de 2011

6. ESTRUTURAS DE DECISÃO - CONTINUAÇÃO

6.1.2. Definição da estrutura a ser utilizada

Não há uma regra específica para se definir qual estrutura deverá ser utilizada na construção de um sistema. A utilização de uma ou outra, está condicionada à necessidade e exigências do programa. Assim, sistemas podem ser construídos usando-se apenas if e end IF.

Agora, suponha que você é um professor(não suponha que seja do ensino médio em escola pública, pois neste momento eles estão de greve. Deve haver uma razão pra isto). Imagine que precise de um pequeno sistema que verifique se a nota do aluno é suficiente para aprovação. Vamos a um exemplo prático.

Para lhe ajudar a consolidar os conhecimentos, vamos criar um formulário. Abra uma planilha e siga os passos.

1º. Abra o editor do VBA(Ctrl + F11)




2º. Abra um formulário




3º Altere as propriedades do formulário




Perceba que a propriedade Caption define o nome que aparecerá na barra de título do formulário.

4º. Insira os objetos necessários no formulário

A alteração das propriedades do objeto segue sempre o mesmo padrão. Assim, é só seguir o exemplo do 3º passo.

Veja que inserimos um rótulo com Caption: Nota. Uma caixa de texto e um botão com caption: Verificação.



6.1.3. Programando o sistema de notas

Vamos verificar se a média das notas dos alunos é maior ou igual a 60. Caso positivo, o aluno será aprovado. Veja o fluxograma e tente compreender como o programa irá funcionar.




Perceba que a nota será inserida pelo o usuário, no nosso caso, o próprio professor lembra?! Aquele que lhe contratou para desenvolver o sistema (não se esqueça de combinar o preço antes!).

Logo após a inserção da nota, verificamos se a mesma é maior/igual a 60. Se for, aprovamos a galera, do contrário damos pau em todo mundo sem dó. Se reclamarem da rigidez, diga que a culpa não é sua, o computador é muito insensível.

Agora podemos começar a programar. Para começar, dê dois cliques no formulário. Você verá que o evento padrão é o CLICK, porém, precisamos programar primeiro o evento Initialize, ou seja, aquele que é disparado quando o formulário é aberto.





Na caixa de combinação da direita escolha initialize. Agora, vamos digitar uma linha de código para colocarmos o foco na caixa de texto assim que o formulário for inicializado.

É só digitar me.TextBox1.SetFocus(A caixa de texto será focada)





Assim, todas as vezes que o formulário for aberto, a caixa de texto receberá o foco sem que seja necessário usar o mouse para isto.

Agora dê dois clicks no botão que você criou e digite o código abaixo. Todas as considerações relevantes sobre o algoritmo estão em seu próprio corpo.





Clique em F5 para dar play no sistema. Se quiser que o formulário apareça assim que a planilha for aberta é só digitar verificanota.show no evento open da pasta de trabalho. Dê dois cliques em EstaPasta_de_trabalho e escolha Workbook. Depois de feito isto, perceba que na caixa de combinação à direita, aparecerá Open, que é o evento padrão do Workbook. Veja como fazer abaixo:



Agora é só digitar o código





CÓDIGO PARA COPIAR

Private Sub CommandButton1_Click()

'Iniciamos o programa com o foco na caixa de texto
Me.TextBox1.SetFocus

'Pense! Se o valor que estiver na nossa caixa de texto for maior que 5, então...
If Me.TextBox1.Value > 60 Then

'Emitiremos a mensagem "Aluno Aprovado"
MsgBox "Aluno Aprovado!"

'Voltamos o foco para para a caixa de texto
Me.TextBox1.SetFocus

'Do contrário
Else

'Emitiremos a mensagem "Aluno Reprovado"
MsgBox "Aluno Reprovado!"

'Voltamos o foco para para a caixa de texto
Me.TextBox1.SetFocus

'Fechamos a estrutura de decisão
End If

End Sub


6.2. Estrutura SE(IF) / ENTÃO(THEN) / SENÃO SE(ELSEIF) /  SENÃO(ELSE) – Ninho de IF.

Você deve ter percebido que no tópico 6.1, fizemos basicamente uma verificação, ou seja, o aluno será aprovado ou reprovado. Porém, como todos sabemos, existe a repescagem, mais conhecida como recuperação (quem nunca pegou que atire a primeira pedra!).

Imagine, o professor quer saber quais alunos foram aprovados, reprovados, ficaram em recuperação e demais opções se for o caso. É possível? Claro meu amigo microsoftmaníaco(acabei de inventar!!!, mas não é um trava língua – estou ligando para a editora do Aurélio para acrescentarem. kkk), vamos usar o comando IF / THEN / ELSEIF /  ELSE, também conhecido como ninho de IF.

Para esclarecer melhor, vamos usar o exemplo do tópico anterior e fazer os incrementos necessários. Os comentários em caixa-alta e em vermelho no CÓDIGO PARA COPIAR farão menção às novas linhas de código, porém não se esqueça, as linhas verdes são apenas comentários.


CÓDIGO PARA COPIAR

Private Sub CommandButton1_Click()
'Iniciamos o programa com o foco na caixa de texto
Me.TextBox1.SetFocus

'Pense! Se o valor que estiver na nossa caixa de texto for maior que 60, então...
If Me.TextBox1.Value >= 60 Then

'Emitiremos a mensagem "Aluno Aprovado"
MsgBox "Aluno Aprovado!"

'DO CONTRÁRIO SE, A NOTA FOR ENTRE 40 E 60, ENTÃO, O ALUNO ESTARÁ DE RECUPERAÇÃO

ElseIf Me.TextBox1.Value >= 40 And Me.TextBox1.Value < 60 Then

'EMITIREMOS A MENSAGEM "ALUNO EM RECUPERAÇÃO"
MsgBox "ALUNO EM RECUPERAÇÃO"

'DO CONTRÁRIO SE, A NOTA FOR ENTRE 10 E 40, ENTÃO, O ALUNO ESTARÁ REPROVADO

ElseIf Me.TextBox1.Value >= 10 And Me.TextBox1.Value < 40 Then

'EMITIREMOS A MENSAGEM "ALUNO REPROVADO"
MsgBox "ALUNO REPROVADO"

'AGORA SE O ALUNO FOR MUITO RUIM, A GENTE PODE DETONAR. VEJA SÓ.
'SE A NOTA FOR MENOR QUE 10.

Else 'PERCEBA QUE NÃO USAMOS MAIS O ELSEIF, JÁ QUE ESTA É A ÚLTIMA OBSERVAÇÃO.

'EMITIREMOS A SEGUINTE MENSAGEM
MsgBox "ALUNO EXPULSO DA ESCOLA" 'SACANAGEM!!!!!!!!!

'VAMOS APROVEITAR E LIMPAR A TELA PARA UMA NOVA DIGITAÇÃO
Me.TextBox1.Value = ""

'Voltamos o foco para para a caixa de texto
Me.TextBox1.SetFocus

'Fechamos a estrutura de decisão
End If

End Sub


Viu como o raciocínio é simples. Este é apenas um exemplo, você pode fazer quantos testes quiser ou quantos o sistema exigir.

No próximo tópico, veremos uma estrutura diferente, porém que tem o mesmo objetivo desta. Algumas pessoas dizem ser mais simples. Vamos ver o que você acha.

6.3. Estrutura SELECT CASE

A estrutura SELECT CASE  pode ser usada para simplificar algoritmos que programam atividades repetitivas. Se achar o ninho de IF cansativo, você poderá utilizar este comando.

Para exemplificar, vamos usar o mesmo raciocínio do item 6.2, aplicando o SELECT CASE. Para tanto, vamos implementar nosso projeto, acrescentando mais um botão. Assim, não perderemos os códigos anteriores. Faça como na figura abaixo:




Agora dê um duplo click no botão que você acabou de criar e vamos programá-lo.





CÓDIGO PARA COPIAR

Private Sub CommandButton2_Click()

'No Caso do SELECT CASE, precisamos criar uma variável para armazenar o valor da nota que será
'digitado na TextBox1

'Declare a variável
Dim Nota As Integer
'Agora definimos o valor que será guardado na variável. Veja que, o número que for digitado na
'textbox1 ficará armazenado na variável. Então Nota será igual ao valor da Textbox1.
Nota = Me.TextBox1.Value
'Vamos iniciar a estrutura
Select Case Nota
'Pense! Se o valor que estiver na nossa caixa de texto for maior que 60, então...
Case Is >= 60
'Emitiremos a mensagem "Aluno Aprovado"
MsgBox "Aluno Aprovado!"
'DO CONTRÁRIO SE, A NOTA FOR ENTRE 40 E 60, ENTÃO, O ALUNO ESTARÁ DE RECUPERAÇÃO
Case Is >= 40
'EMITIREMOS A MENSAGEM "ALUNO EM RECUPERAÇÃO"
MsgBox "ALUNO EM RECUPERAÇÃO"
'DO CONTRÁRIO SE, A NOTA FOR ENTRE 10 E 40, ENTÃO, O ALUNO ESTARÁ REPROVADO
Case Is >= 10
'EMITIREMOS A MENSAGEM "ALUNO REPROVADO"
MsgBox "ALUNO REPROVADO"
'AGORA SE O ALUNO FOR MUITO RUIM, A GENTE PODE DETONAR. VEJA SÓ.
'SE A NOTA FOR MENOR QUE 10.
'CASO CONTRÁRIO
Case Else 'PERCEBA QUE NÃO USAMOS MAIS O ELSEIF, JÁ QUE ESTA É A ÚLTIMA OBSERVAÇÃO.
'EMITIREMOS A SEGUINTE MENSAGEM
MsgBox "ALUNO EXPULSO DA ESCOLA" 'SACANAGEM!!!!!!!!!
'VAMOS APROVEITAR E LIMPAR A TELA PARA UMA NOVA DIGITAÇÃO
Me.TextBox1.Value = ""
'Voltamos o foco para para a caixa de texto
Me.TextBox1.SetFocus
'LÓGICO, FECHAMOS O PROGRAMA
End Select


End Sub


Observe que o código será executado até que a condição seja atendida. Por esta razão, a Textbox1 só será limpa e receberá o foco novamente se você digitar um número menor que 10, pois este é o último teste. Caso queira que se repita em todas as hipóteses, copie os códigos.

Finalmente, terminamos com as estruturas de repetição. Agora, vamos ao assunto mais interessante da programação VBA, que lhe permitirá criar programas extremamente sofisticados e que terão como limite apenas a sua imaginação.


Para acessar o curso completo Clique aqui