domingo, 25 de dezembro de 2011

11.2. Utilizando a COMBOBOX para manipular planilhas

11.2. Utilizando a COMBOBOX para manipular planilhas

Vamos usar uma COMBOBOX para navegarmos de uma planilha à outra. Crie um formulário igualzinho ao que criamos no item anterior. Desta vez, vamos trabalhar com o evento INITIALIZE do formulário e com o CLICK da COMBOBOX.




Faça o teste. Quando você escolher uma certa planilha na COMBOBOX, ela será ativada na pasta de trabalho.





Para acessar o curso completo Clique aqui

segunda-feira, 19 de dezembro de 2011

11. TRABALHANDO COM OBJETOS

11. TRABALHANDO COM OBJETOS

Vamos começar aprender a trabalhar com os objetos do Excel e usar os conhecimentos que adquirimos até o momento para manipulá-los.

Estes conhecimentos são muito importantes, pois o tempo todo trabalharemos com as COMBOBOX, LISTBOX, CHECBOX, OPTIONBUTTON, COMMANDBUTTON entre outros.

11.1. Criando um LOOP para preencher uma COMBOBOX


As COMBOBOXS são muito utilizadas nos sistemas criados em programação VBA. Precisamos aprender a utilizar bem esta ferramenta, se quisermos criar bons programas.

Muitas vezes, precisamos preencher uma COMBOBOX com dados que estão em uma planilha. Veja o exemplo abaixo.




Crie um formulário com esta carinha.




Dê dois clicks nele, perceba que o evento padrão do formulário será o click, porém, vamos construir nosso algoritmo dentro do INITIALIZE, que é o evento que é ativado assim que o formulário é aberto.



Agora click em F5. Veja que a COMBOBOX foi preenchida com os dados que estão na planilha.


Para acessar o curso completo Clique aqui

domingo, 18 de dezembro de 2011

10.3. Verificando a autenticidade do CPF

10.3. Verificando a autenticidade do CPF

Vamos criar uma função capaz de verificar se um dado número de CPF é valido ou não. Para tanto, precisamos entender a lógica do cálculo. É importante saber, que o raciocínio de calculo do DV(Digito Verificador) do CPF é de domínio público e todos os programadores, de qualquer linguagem o utilizam para validar CPF em seus sistemas.

Entenda a lógica da coisa! Imagine que lhe foi dado número do CPF, 590.465.719-90. Como saber se este número é valido ou não?

Para se calcular o DV, precisamos considerar que o cálculo é feito inicialmente, com os 9 primeiros números do CPF. Para facilitar, veja a tabela abaixo.




Colocamos os números do CPF e identificamos suas posições. Vamos fazer os primeiros cálculos.

Iremos multiplicar os valores de cada dígito do CPF, da esquerda para direita, começando com 10 e progredindo de forma decrescente. Finalmente, achamos o resultado que usaremos para verificar a validade do CPF.



Somamos os valores encontrados e teremos 269.

O CPF é composto por 11 números(9 + 2(DV)). Então, vamos pegar o valor que encontramos e dividir por 11, sendo 269/11 = 24,45, resto 5.

O raciocínio do cálculo é simples. Seguiremos a seguinte regra: se o resto for 0 ou 1, então o DV será igual a 0. Caso contrário, o número do DV será 11 menos o resto encontrado.

No nosso caso, o primeiro número do DV será 11 – 5 = 6.

Vamos agora, encontrar o segundo DV. Para isto, vamos reformular a tabela anterior, acrescentando o número que encontramos.



Perceba, já que encontramos o primeiro dígito, que multiplicamos o 1º número por 11 progredindo decrescentemente como na tabela anterior. Veja que na 10ª posição, colocamos o número que encontramos para o primeiro DV.

Fazendo a soma, teremos 327/11 = 29,72, resto 8. Da mesma forma, 11-8 = 3.

Pronto, o DV deste CPF deveria ser 63 e não 90. O correto é 590.465.719-63

Veja como ficou o código:



Vamos fazer os testes. Digite a fórmula do CPF na célula B1 como mostra a figura. Na célula A1, digite o CPF incorreto, que a função retornará INVALIDO. Nas células de baixo digite o número correto e veja o resultado.




Depois de ver o funcionamento básico das funções, vamos aprender uma pouco mais sobre os objetos do Excel.


Para acessar o curso completo Clique aqui

10.2. Criando uma função para descobrir o valor que originou o ICMS

10.2. Criando uma função para descobrir o valor que originou o ICMS

Algumas pessoas me perguntaram como descobrir o valor principal que originou o ICMS nas notas fiscais. Simples, porém, não se engane. Se multiplicarmos o valor total por 0,18 encontraremos apenas 18% do mesmo. Então, o que fazer? Por exemplo! Se o valor da venda for R$ 300,00 sem ICMS, para acrescentarmos o mesmo, precisamos fazer 300 x 1,18, sendo o valor total de R$ 354,00. Então, se quisermos saber o valor original, é só fazer o processo inverso, ou seja, 354/1,18, retornando o valor de R$ 300,00.

Moral da história! Uma nota com valor final de R$ 354,00, tem o valor do ICMS de R$ 54,00, que é 18% de R$ 300,00 e não R$ 63,72, que é 18% de R$ 354,00. Sabendo isto, você não corre o risco de pagar ou fazer retenções indevidas.

Vamos criar uma função que faça este cálculo automaticamente. Você pode usar a mesma planilha do exemplo anterior, é só mudar o título da célula D1 para VALOR ORIGINAL. Lembre-se, usaremos os mesmos números, porém, estamos falando de uma coisa completamente diferente, estaremos supondo que os valores da coluna 2 já estão cheios e calcularemos o valor inicial na coluna 4. Então vamos lá.


Veja o código. Muito simples! Não há muito que dizer.



Agora é só fazer o teste como no exemplo anterior.


Para acessar o curso completo Clique aqui

sábado, 10 de dezembro de 2011

REVISÃO DO FLUXO DE CAIXA PESSOAL

Pessoal! Fiz uma revisão nos códigos do fluxo de caixa pessoal e percebi que não havia programado o botão EXCLUIR. Desculpe-me pelo vacilo! Agora tá tudo ok!!!

Logo logo, estarei ensinando como utiliza-lo!!! Até lá!!!


 Para baixa o sistema Clique aqui

sexta-feira, 9 de dezembro de 2011

9.7. Excluindo dados da planilha

Pessoal! Cometi um erro no decorrer do nosso curso. Havia prometido ensinar o LOOP para excluir linhas, porém, não postei nada.

Para quem esperou por este capítulo, segue fresquinho!

9.7. Excluindo dados da planilha

Algo muito importante que devemos aprender a fazer é excluir automaticamente as linhas da planilha quando for necessário.

Faça uma planilha como esta. Use números que quiser.



Suponha que você deseja criar um LOOP que percorra a planilha excluindo as linhas cujo número seja menor que 10.

Antes de continuarmos, click com o botão direito na barra superior do Excel e ative a CAIXA DE FERRAMENTAS DE CONTROLE.




Feito isto, vamos inserir um botão na planilha.



Dê dois clicks no botão que acabamos de criar para acessar o seu evento click e digite o código abaixo




Vamos voltar à planilha. Na CAIXA DE FERRAMENTAS DE CONTROLE, click no botão MODO DE DESIGN para sairmos do ambiente de desenvolvimento e podermos acionar a ação do botão quando for clicado.




Agora é só clicar no botão. Verá que todas as linhas que possuírem números menores que 10 serão excluídas.

É isso pessoal! Fizemos muitos exemplos utilizando os diversos tipos de LOOPS. Acredito que você conseguiu compreender a utilização dos códigos e sua aplicação nas mais diversas situações do dia-a-dia. Vamos agora, aprender um pouco sobre a construção de funções no Excel, com o uso do VBA. Até logo!!!

Para acessar o curso completo Clique aqui

quinta-feira, 8 de dezembro de 2011

10. CRIANDO FUNÇÕES PERSONALIZADAS COM VBA

10. CRIANDO FUNÇÕES PERSONALIZADAS COM VBA

Qualquer usuário do Excel sabe o que é uma função. Em todos os cursos básicos oferecidos, aprendemos as funções SOMA(), SOMASE(), CONT.SE() e por ai em diante.

Estas funções são fornecidas prontas pelo aplicativo e só precisamos digitar o operador “=” antes de qualquer uma delas para que elas cumpram o seu papel.

Neste ponto do nosso curso, você já deve ter percebido o poder da programação VBA para criar e desenvolver recursos que vão além dos que o Excel nos oferece. Podemos criar, desde uma função simples que calcule o valor do ICMS a pagar, considerando-se uma determinada , até uma função complexa de verificação do DV de um CPF.

A dinâmica de desenvolvimento das funções é a mesma dos Sub-procedimentos que criamos até aqui. A única diferença, é que nas funções, começamos com Public Function e Finalizamos com End Function.

Não vamos perder muito tempo com as funções, pois o raciocínio de desenvolvimento é o mesmo dos Sub-procedimentos. Iremos criar algumas para exemplificar.


10.1. Criando uma função para calcular ICMS.

Suponha que você tenha um pequena empresa, uma negoção que comercialize bala de goma, pipoca e balão. Até rimou! KKK.

Você registrou suas vendas em uma planilha é quer saber qual seria o valor do ICMS de cada venda. Então vamos lá! Eis a planilha de vendas.





Agora veja como é simples criar a função. Abra o editor do VBA(Alt + F11). No módulo, digite o código abaixo. Se tiver dúvidas sobre Modulo veja o item 4.1. Abrindo o Editor do VBA.



Veja como o código é simples. Agora vamos fazer os testes na planilha. Deixe a célula D2 selecionada e click em inserir função.



Click em FUNÇÕES DEFINIDAS PELO USUÁRIO e depois em ICMS.






O formulário argumentos da função será aberto. Em valor, digite B2 e em Taxa, C2. Finalmente, click em OK.






Perceba que o valor do ICMS será calculado pela função que acabados de criar. Pronto, agora é só copiar a formula para as demais células.






Bem simples! Vamos criar outras funções para você entenda melhor. Até lá!

Para acessar o curso completo Clique aqui

domingo, 4 de dezembro de 2011

9.6. Soma Números

9.6. Soma Números

Vamos criar um código capaz de somar todos os números inseridos em uma INPOUTBOX. Para tanto, usaremos um LOOP. Porém, precisamos criar uma consistência, para impedir que o usuário insira um número negativo, e para isto, usaremos a estrutura condicional.




CÓDIGO PARA COPIAR

Sub SomaNumeros() 'EXCELECIA.BLOG@GMAIL.COM
'Variável que receberá o número que será digitado na INPUTBOX.
Dim Numero As Variant
'Esta variável acumulará a soma dos números digitados.
Dim Soma As Variant

'Mandamos os códigos serem executados sem fazer nenhum teste por enquanto. Simplesmente, Faça.
Do
'Recebe a digitação
Numero = InputBox("Insira um número: ", "SOMA NÚMEROS")
'Se o número digitado for menor do que 0, começamos de novo até que o usuário digite um número
'válido.
If Numero < 0 Then

MsgBox "Digite um número maior que 0(Zero)!"
'se o número digitado for negativo, então zeramos a variável número para receber outro valor
Numero = 0
End If
'Agora é só efetuar a soma.
Soma = Val(Soma) + Val(Numero)
'Usamos um FLAG para finalizar
Loop While Numero <> "FIM"
'Exibimos o resultado da soma
MsgBox "O Resultado da soma: " & Soma

End Sub

Faça o teste. Tecle Alt + F5 para iniciar o sistema. Na INPUTBOX, digite 1, click em enter. Digite 2, click em enter. Digite 27 e click em enter. Para finalizar, digite FIM. O resultado será este.








Para acessar o curso completo Clique aqui

terça-feira, 29 de novembro de 2011

9.5. Reajuste por faixa salarial

Tamo de volta!!!


9.5. Reajuste por faixa salarial

Já criamos um sistema para reajustar salários. Porém, no dia-a-dia, você pode ser obrigado a criar um sistema que reajuste os salários, considerando determinadas faixas salariais.

O LOOP que criaremos agora é daqueles perigosos, que se infinitos, podem travar o sistema. Para impedirmos que isto aconteça, precisaremos criar um FLAG, qualquer palavra ou número, que sendo digitada, finalize o sistema.

Vamos criar o sistema observando os seguintes critérios:

SALÁRIO                                                                                       REAJUSTE

MENOR/IGUAL A R$ 545,00                                                               30%
ENTRE R$ 545,00 E R$ 1.000,00                                                          20%
ENTRE R$ 1.000,00 E R$ 2.000,00                                                         5%
ACIMA DE R$ 2.000,00                                                                        Sem aumento.

Então, se o salário do funcionário for menor/igual a R $545,00, vamos reajustá-lo em 30%. Caso o salário seja maior que R$ 545,00 e menor/igual a R$ 1.000,00, aumentaremos em 20%. Para salários maiores que R$ 1.000,00 e menores/igual a R$ 2.000,00, o reajuste será de 5%. Finalmente, se o salário for maior que R$ 2.000,00, não haverá reajuste. O cara vai reclamar, mas fazer o que? Foi o chefe quem mandou.

Para terminar a execução do nosso sistema, vamos definir a palavra “FIM” em letras maiúsculas.

Uma consideração importante neste exemplo é sobre a declaração da variável. Perceba que o salário é numérico, porém, a palavra FIM não. Por isto, declaramos a variável Sal como Variant, que pode receber os dois tipos.

Mãos à obra.




CÓDIGO PARA COPIAR


Sub ReajusteFaixaSalarial()

'Declaramos a variável que receberá o valor do salário. Ela será do tipo Variant, pois
'receberá tanto valores numéricos como letras.
Dim Sal As Variant

'Começamos um LOOP que só será finalizado, quando digitarmos a palavra FIM.
Do
'Abrimos uma CAIXA DE ENTRADA para receber o valor que será armazenado na variável.
Sal = InputBox("Digite o salário!", "REAJUSTE POR FAIXA SALARIAL")
    'Começamos um LOOP que impedirá a entrada de valores menores que zero.
    Do While Sal <= 0
    MsgBox "Digite um valor maior que 0(Zero)!!!"
    Sal = InputBox("Digite o salário!", "REAJUSTE POR FAIXA SALARIAL")
    Loop

'Agora é só fazer as verificações e pronto.
If Sal <= 545 Then
MsgBox "Salario reajustado:  " & FormatCurrency(Sal * 1.3)
ElseIf Sal > 545 And Sal <= 1000 Then
MsgBox "Salario reajustado:  " & FormatCurrency(Sal * 1.2)
ElseIf Sal > 1000 And Sal <= 2000 Then
MsgBox "Salario reajustado:  " & FormatCurrency(Sal * 1.05)
ElseIf Sal > 2000 Then
MsgBox "Não há reajuste para este salário!"
End If
Loop Until Sal = "FIM"

End Sub


Agora é fazer os testes. Deixo com você!


Para acessar o curso completo Clique aqui

domingo, 13 de novembro de 2011

9.4. Reajuste salarial

9.4. Reajuste salarial

Neste próximo código, veremos na prática a diferença de formatação dos LOOPS da estrutura DO WHILE/UNTIL – LOOP. Vamos usar duas formatações diferentes para tornar clara a compreensão.





CÓDIGO PARA COPIAR

Sub ReajusteSalarial() 'EXCELECIA.BLOG@GMAIL.COM
Dim Salario As Double
Dim Reajuste As Double
'Esta formatação, não exige que a variável SALARIO possua algum valor. Isto, por que
'ela ordena que o código seja executado primeiro(LEMBRA DO CAPITAL NASCIMENTO!), sendo a verificação realizada depois,
'ou seja, faça tudo quantas vezes for preciso, até que o salário digitado seja maior que 0(Zero)
Do
    'Nesta caixa de entrada vamos digitar o salário
    Salario = InputBox("Digite o valor do salário: ", "REAJUSTE SALARIAL")
    If Salario < 0 Then
    MsgBox "Não é permitido digitar um salário menor que 0(Zero)"
    End If
Loop Until Salario > 0
Reajuste = -1
'Esta estrutura, exige que a variável reajuste possua algum valor, pois do contrário o LOOP
'não se iniciará. Ela diz: Faça enquanto Reajuste for menor que 0(Zero), porém, como você
'já percebeu, a INPUTBOX ainda não foi aberta para digitarmos o valor do reajuste e é por isto
'que forçamos a variável como Reajuste = -1 para entrarmos no LOOP. Aqui fica claro a diferença
'entre as duas formatações de LOOP utilizadas.
Do While Reajuste < 0
'Nesta caixa, digitaremos o reajuste
Reajuste = InputBox("Digite o valor do reajuste: ", "REAJUSTE SALARIAL")
    If Reajuste < 0 Then
    MsgBox "Não é permitido reajuste menor que 0 (Zero)"
    End If
Loop
'Agora vamos fazer os cálculos. Como você sabe, para encontrarmos um número que será ajustado em
'X por cento, precisamos primeiro transformar este percentual em número índice. Por que? Por que números
'percentuais são apenas representativos, por exemplo: 10% de 100 = 10, porém, 10% de 1000 = 100, ou seja
'queremos apenas, a 10ª parte de um número qualquer. Então para reajustarmos nosso salário, precisamos
'dividir o reajuste por 100(daí percentual) e somar 1. Por que? Imagine, se dividirmos 10/100, teriamos
'0,10. Quando multiplicarmos o valor do salário por este índice, teremos a 10ª parte dele, porém, se
'somarmos ao índice 1, teremos 1,10, assim qualquer número multiplicado a este índice terá o proprio
'valor(por causa do 1) e mais a 10ª parte(0,10).
Reajuste = Reajuste / 100 + 1
'Finalmente, é só pegar o valor do salário que foi digitado na INPUTBOX e multiplica-lo pelo índice
'de reajuste.
Salario = (Salario * Reajuste)
'Exibimos o resultado.
MsgBox Salario
End Sub


Aperte F5. Agora digite o salário de R$ 310,00 para ser reajustado, teclando ENTER para continuar.




Vamos reajustá-lo em 30%.





O cálculo será realizado e o valor imprimido em uma MSGBOX. Moleza!!!





Para acessar o curso completo Clique aqui









segunda-feira, 17 de outubro de 2011

9.3. Identificando números pares e ímpares

Voltei!!! Mais uma atualização!!!!!!


9.3. Identificando números pares e ímpares

Vamos criar um código para identificar os números pares e ímpares inseridos em uma INPUTBOX. Neste exemplo, vamos usar um operador matemático que não conhecemos ainda, o MOD, que tem a função de identificar o resto de uma divisão.

Para identificarmos os números pares, precisamos verificar se os mesmos, divididos por 2, apresentam resto igual a 0. Caso positivo, teremos um número par. Se o resto for 1, teremos um número ímpar.




CÓDIGO PARA COPIAR

Sub IdentificaParImpar93()

'Variável que receberá os números digitados na INPUTBOX.
Dim Numero As Integer
'Este fará a contagem do número de vezes que o FOR - NEXT irá ser excecutado
Dim Contador As Integer
'Esta variável, receberá a mensagem que será exibida no final do código.
Dim Mensagem As String

'Preenche a variável mensagem com o texto que será mostrado no final.
Mensagem = "NÚMEROS DIGITADOS: " & Chr(13) & Chr(13)
'Para o contador que rodará de 1 a 5 de um em um.
For Contador = 1 To 5 Step 1
'Permitiremos a digitação de um número por fez na INPUTBOX.
Numero = InputBox("Digite um número: ", "IDENTIFICA PAR/IMPAR")
'Verificamos se este número que foi digitado é par. Para isto, usamos MOD que é uma função
'do VBA
    'MOD tem a função de verificar se o resto da divisão de um número por 2 será 0 ou 1.
    'Caso 0, o número será par, do contrário será ímpar
    If (Numero Mod 2 = 0) Then
    'Caso seja par, pegaremos a mensagem que está na variável de mesmo nome e exibiremos no final
    'do código.
    Mensagem = Mensagem & Numero & "  Par" & Chr(13)
    'Do contráio, se for ímpar
    Else
    'Emitiremos uma mensagem semelhante a anterior, porém, para os números impares.
    Mensagem = Mensagem & Numero & "  Impar" & Chr(13)
    End If
'Fechamos o LOOP
Next
'Agora emitimos a mensagem no final do código, identificando os números pares e impares.
MsgBox Mensagem
End Sub


Clique em F5. O formulário será aberto. Digite os números 7, 9, 2, 5, 6 e clique em OK.




O resultado será este:



O operador MOD cumpriu o seu papel, todos os números foram identificados corretamente.


Para acessar o curso completo Clique aqui

domingo, 9 de outubro de 2011

9.2. Formatando células com FOR-EACH-NEXT

9.2. Formatando células com FOR-EACH-NEXT

No tópico 7.3, 1º EXEMPLO, aprendemos a usar a estrutura FOR-EACH-NEXT para exibir o nome das planilhas de uma pasta de trabalho. No 3º EXEMPLO, vimos como inserir valores e formatá-los em um intervalo de células. Vamos agora, criar um código capaz de identificar determinado número em uma planilha, formatando-o de acordo com nossas preferências. Vamos lá.

Na planilha de exemplos, crie a Plan6 e digite os números abaixo:




Criaremos um código que identifique todo o número 5 nesta planilha, aplicando a formatação desejada. Veja como vai funcionar.





CÓDIGO PARA COPIAR

Sub FormatandoForEachNext92()

'A variável que receberá a planilha
Dim Planilha As Worksheet
'Esta variável receberá um intervalo de células
Dim Celula As Range
'Associamos a variável planilha a Plan6
Set Planilha = Worksheets("Plan6")

'Criamos um bloco. Tudo que for digitado em WITH e END WITH, dirá respeito a Plan6
With Planilha
'Para cada Celula entre A1:F20
For Each Celula In Range("A1:F20")
    'Se o valor de uma destas céluas for 5, vamos aplicar as formatações abaixo.
    If Celula.Value = 5 Then
    'Criamos um bloco só para as células que vamos formatar
    With Celula
    'Mudaremos o tamanho da fonte
    .Font.Size = 22
    'Negritamos o valor
    .Font.Bold = True
    'Formatamos italic
    .Font.Italic = True
    'Definimos a cor azul
    .Font.Color = RGB(0, 0, 255)
    'O interior da celula será amarelo
    .Interior.ColorIndex = 6
    End With
   
    End If
   
Next

End With

End Sub


Veja o resultado:




Perceba que somente as células com o número 5 sofreram modificações, conforme o código elaborado.


Para acessar o curso completo Clique aqui

terça-feira, 4 de outubro de 2011

9. COMBINANDO LOOPS

Mais uma atualização do curso! Até a próxima!!!

9. COMBINANDO LOOPS

A mistureba vai começar! A partir deste momento, vamos construir algoritmos mesclando tudo o que aprendemos até agora.

Vamos fazer o máximo de exemplos possível para compreendermos melhor as aplicações em VBA e percebermos como a programação está presente em nossa vida cotidiana. Para começar, vamos tentar entender como os caixas eletrônicos que utilizamos todos os dias funcionam.

9.1. Lógica algorítmica do caixa eletrônico.

Com o passar dos anos, os bancos investiram maciçamente em TI para automatizar as suas ações. Por esta razão, bancário virou cabeça de bacalhau. Não vejo um desde essa informatização toda.

Como fomos expulsos das agências, precisamos aprender a interagir com os caixas eletrônicos. O problema é que o grande vazio existencial do homem consiste em operar parafernálias eletrônicas que não entende o funcionamento. Não sou psicólogo mais vou te ajuda nessa OK?

Vamos criar um pequeno formulário para facilitar a compreensão.

Abra o editor do VBA(Alt + F11) e siga o exemplo abaixo. Obs: você já deve ter percebido que estou usando sempre a mesma planilha, estando esta postada no blog para que você possa baixar e usá-la como ferramenta de estudo.




Veja que este formulário não se parece nada com a tela do programa de um caixa eletrônico. É óbvio, que o nosso objetivo é apenas compreender o raciocínio lógico que permeia um sistema desta natureza. Então let’s GO!!!





9.1.1. Programando o Botão Depositar



Nada de diferente do que já vimos até agora. Simplesmente salvamos o dado digitado na TextBox1 direto na Range(“A1”) da Plan4, usando uma InputBox.

O botão sacar é que exigirá mais de nós.

9.1.2. Programando o Botão Sacar

Uma das funções mais importantes do programador é se antever à possíveis erros praticados pelos usuários. Para tanto, precisam ser criadas consistências que minimizem estas possibilidades.

Como estamos simulando o raciocínio algorítmico de um caixa eletrônico, imagine a seguinte situação hipotética:

Você foi contratado pelo banco JJ para elaborar um sistema para um caixa eletrônico. O programa deverá registrar os depósitos dos clientes. Até aqui tudo bem.

O negócio ficará estreito, quando os clientes quiserem sacar seus depósitos. Por que? Imagine que uma pessoa que tem R$ 100,00 digite sem querer R$ 1000,00 e consiga sacar tal valor.

Minha pergunta: Cê tá no sal ou não ta?

Pois é meu caro amigo! Precisamos resolver este troço. Nosso sistema precisar ser inteligente a ponto de não permitir que tais situações ocorram. Então sigam meus bons!





CÓDIGO PARA COPIAR

Private Sub CB_Sacar_Click()
'Declare a variável que receberá a planilha
Dim Planilha As Worksheet
'A variável que receberá o valor do saque
Dim Sacar As Currency
'Associamos a variável Planilha com a Plan5
Set Planilha = Worksheets("Plan5")
'Criamos uma InputBox para receber o valor do saque.
Sacar = InputBox("Digite o valor que deseja sacar", "CAIXA ELETRÔNICO")
'Criamos um bloco para fazer referência à plan5. Tudo que for digitado entre WITH PLANILHA E END,
'dirá respeito a plan5
With Planilha
'Testamos. Enquanto o valor do saque for maior que o valor que o saldo em conta, emitiremos uma mensagem
'Informando qual é o saldo e solicitaremos novamente que um novo valor seja digitado. o Laço não será
'desfeito enquanto um valor menor ou igual ao saldo for digitado.
Do While Sacar > .Range("A1").Value
                                     'Para exibirmos o valor como moeda, usamos(FormatCurrency) para fazer
                                     'a conversão.
MsgBox "Seu saldo em conta é de: " & FormatCurrency(.Range("A1").Value)
'Precisamos pedir a digitação novamente, pois uma vez no LOOP, não será possivel voltar ao início do código
'para solicita a digitação da INPUTBOX que criamos lá em cima. Por isto repetimos ele aqui.
Sacar = InputBox("Digite o valor que deseja sacar", "CAIXA ELETRÔNICO")
'Fechamos o Loop
Loop
'Agora, famos fazer uma MSGBOX melhor elaborada. Ela fará parte do nosso testo, pois a ação da funcão condicional
'IF - END IF, dependerá da resposta que o usuário der. Perceba que o texto sempre fica entre aspas duplas.
'Variáveis são conectadas pelo &. Nesta caixa de mensagem, usamos o comando vbYesNo, que criará uma MSGBOX com as
'opções sim ou não. Podemos ainda, usar o vbQuestion para que uma interrogação apareça quando da execução.
'Finalmente, se o usuário clicar em NÃO, ENTÃO(THEN), vamos sair da rotina(Exit Sub), significando dizer, que o
'código vai simplesmente parar e nada será executado a partir dali.
If MsgBox("Deseja sacar " & FormatCurrency(Sacar) & " reais de sua conta corrente?", vbYesNo + vbQuestion, _
"CAIXA ELETRÔNICO") = vbNo Then
Exit Sub
'Do contrário, ou seja, se o usuário clicar SIM, continuaremos execução
Else
'E executaremos isto. Pegaremos o valor que está em A1 e subtrairemos o valor que está em SACAR.
'calculo simples.
'                     ao valor que já
'A1 será igual        já possue       menos SACAR
.Range("A1").Value = .Range("A1").Value - Sacar
End If
End With
End Sub


É hora dos testes. Click em F5 ou aperte Play como na figura abaixo





Click em Depositar, Caixa de Entrada (InputBox) será aberta. Digite 2000 e click em OK. Veja que o valor do depósito aparecerá na célula A1.





Agora, click no botão Sacar. Na InputBox digite 300 e click em OK. A MSGBOX vai fazer o seu papel. Se clicar em NÃO, sairemos da rotina e o código deixará de ser executado.


Se clicar em SIM, o saque será realizado e o saldo em conta será atualizado em A1 para R$ 1700,00.



Começamos bem. Creio que você entendeu como precisamos estar atentos à necessidade de elaboração de testes capazes de garantir o perfeito funcionamento do programa. Seguindo este raciocínio, vamos aprofundar o assunto nos próximos exemplos.


Para acessar o curso completo Clique aqui

quinta-feira, 29 de setembro de 2011

PLANILHA DE EXEMPLOS ATUALIZADA.

     
Pessoal!!! A planilha de exemplos foi atualizada. Para baixar clique aqui!

  

8.1. Código para inserir dados por formulários(2º EXEMPLO)


2º EXEMPLO

Vamos melhorar o código que criamos no exemplo anterior. Precisamos encontrar uma forma de salvar os dados em linhas diferentes. Isto porque não podemos mudar a referência da célula no código, todas as vezes que precisarmos salvar um novo dado. Explico melhor - No código criado no 1º EXEMPLO, programamos salvar os dados sempre na RANGE(“A1”). Caso quiséssemos salvar mais um registro, precisaríamos, no próprio código, mudar esta referência, para RANGE(“A2”) por exemplo.

Nem pensar, cê tá doido sô!!!. O VBA tem o objetivo de facilitar e agilizar processos, e é isto que vamos fazer. Veja as alterações propostas no código do 1º EXEMPLO.



CÓDIGO PARA COPIAR

Private Sub CommandButton1_Click()
'Declaramos a variável que receberá a planilha
Dim Planilha As Worksheet
'Declaramos uma variável que registrará o número da linha que o dado digitado no formulário será salvo.
'Ela servirá ainda como um contador que será incrementado todas as vezes que clicarmos no botão.
Dim Linha As Integer
'Informamos ao VBA, qual será a planilha que usaremos.
Set Planilha = Worksheets("plan4")

'Criamos um bloco para trabalharmos com a planilha selecionada. Tudo que estiver dentro deste bloco estará
'relacionado à Plan4.
With Planilha
'Agora, algo muito importante. Nossa variável Linha terá a função de identificar qual é a última linha
'utilizada na planilha. A propriedade UsedRange identifica a ultima celula que está sendo utilizada, fazendo
'uma contagem das linhas Rows.Count. Como queremos a linha subsequente para salvarmos os dados, diremos
'que será a última linha + 1.
Linha = .UsedRange.Rows.Count + 1
'Fazemos uma referência a 1ª linha e 1ª coluna da plan4, dizendo que o nome ou valor que será salvo nesta célula,
'será o mesmo digitado na caixa de texto que criamos
.Cells(Linha, 1).Value = Me.TextBox1.Value
End With
'Limpamos a textbox1 para que possamos começar nova digitação
Me.TextBox1.Value = ""
'Voltamos o foco automaticamente para a textbox1
Me.TextBox1.SetFocus
End Sub

 
Antes de fazer o teste do formulário, vá à plan4 e coloque qualquer palavra na célula A1 para que o VBA possa identificar qual é a última linha utilizada.

Agora digite estes nomes na TextBox e salve(Ermenegilda, Jocrecino, Manelão, Marisdelvinalinda e otorrinolaringologista). O resultado será este:






O nome será apagado da TextBox1, o foco retornado e o mais importante, os dados serão salvos em  uma linha após a outra.

Agora, você pode salvar dados até a planilha acabar. Muito bom!!!

Em breve, aprenderemos a excluir dados das planilhas com apenas um click. Por ora, precisamos aprender a trabalhar com as estruturas de repetição e decisão atuando juntas, pois este conhecimento será necessário para aprendermos a excluir os registros que desejamos nas nossas planilhas.

Para acessar o curso completo Clique aqui

terça-feira, 27 de setembro de 2011

8.1. Código para inserir dados por formulários(1º EXEMPLO)

Atualizado!!!

8.1. Código para inserir dados por formulários

Há duas formas de inserirmos dados em uma planilha através de um formulário.

A primeira delas é fazendo uma referência direta a uma célula usando o objeto RANGE.

1º EXEMPLO

Dê um duplo click no botão SALVAR que você inseriu no formulário. Agora digite o código abaixo:




O resultado será este:




Faça o teste! Digite o que quiser na TEXTBOX1, que o dado será salvo na planilha. Bacana!!! Opa, espera aí! Vai ser sempre assim? Que sentido há em salvar os dados sempre na mesma célula? Como vou montar minha base de dados?

Take it easy my friend! Este foi só um pequeno exemplo para abrirmos o assunto. Vamos melhorar este negócio no próximo exemplo, OK?

Para acessar o curso completo Clique aqui

segunda-feira, 26 de setembro de 2011

8. INSERINDO DADOS NA PLANILHA ATRAVÉS DE FORMULÁRIOS

Mais uma atualização do curso! Vamo que Vamo!!!

8. INSERINDO DADOS NA PLANILHA ATRAVÉS DE FORMULÁRIOS

Antes de começarmos a mesclar os LOOPS, precisamos estudar algo extremamente importante na programação VBA e que usaremos com muita freqüência, deste momento em diante.  O Excel não é exatamente um banco de dados, apesar de possuir linhas e colunas, semelhantes às tuplas e entidades dos bancos de dados. Porém, as planilhas podem ser usadas como base de dados em muitos dos aplicativos que desenvolvemos no dia-a-dia. Para tanto, precisamos aprender a salvar os dados que digitamos em um formulário, direto nas planilhas.

Vamos à prática:

Abra o editor do VBA(Alt+F11), insira um formulário. Mude as propriedades NAME: Inserindo_Dados e CAPTION: INSERINDO DADOS ATRÁVES DO FORMULÁRIO. Veja a figura abaixo:




Depois, insira um rótulo(LABEL), uma caixa de texto(TEXTBOX) e um botão de comando(COMMANDBUTTON). Agora, com o conhecimento que você já possui, mude as propriedades do formulário para ficar com esta carinha:





Para acessar o curso completo Clique aqui

quarta-feira, 21 de setembro de 2011

7.3. Estrutura FOR – EACH – NEXT (5º EXEMPLO)

Achei que hoje não conseguiria atualizar o curso! Ufa!!!


5º EXEMPLO

No 1º EXEMPLO, assim como no 4º, exibimos os nomes das planilhas em MSGBOX’S separadas. Isto atrasa a execução e deixa o código chato e cansativo.

Para resolvermos tal problema, usaremos o mesmo critério adotado no 2º EXEMPLO. Mudaremos a estrutura do código para que o nome das planilhas sejam exibidos em uma única MSGBOX’S.


                                     

CÓDIGO PARA COPIAR

Sub ForEachNext5()

'Declaramos a variável que receberá a planilha.
Dim Planilha As Worksheet
'Declaramos a variável que portará a mensagem que será exibida
Dim Mensagem As String

Mensagem = "OS NOMES DAS PLANILHAS SÃO: " & Chr(13) & Chr(13)
    'Para cada planilha  no livro de trabalho aberto ou ativado, acessaremos a coleção planilhas
    For Each Planilha In ActiveWorkbook.Worksheets
    'Vamos selecionar planilha por planilha. Quando o LOOP rodar pela 1ª vez, ele selecionará a 1ª planilha,
    'no caso, Plan1.
    Planilha.Select
    'Após selecionar-mos a planilha, vamos dar um nome a ela. Para tanto, vamos usar uma INPUTBOX. É importante
    'lembrar, que estamos trabalhando ao nível do aplicativo, assim, o nome que você der a planilha, este será
    'o nome que ela terá à partir deste momento.
    Planilha.Name = InputBox("Introduza o nome que você quer dar a planilha", "INSERINDO PLANILHAS")
    Next
   
    'A diferença principal deste código para o do 4º EXEMPLO está aqui. Usaremos a variável mensagem para armazenar
    'os nomes das planilhas enquanto o LOOP é executado.
    For Each Planilha In ActiveWorkbook.Worksheets
    'Selecionamos a planilha
   
    'Na primeira execução, teremos o texto da mensagem mais o nome da 1ª planilha. Na segunda execução, já teremos na
    'variável mensagem o texto e o nome da primeira planilha. Como a variável mensagem será ela mesma + a proxima planilha,
    'ela ficará agora com o nome de mais uma planilha e assim sucessivamente. Moleza!!!
    Mensagem = Mensagem & Planilha.Name & Chr(13)
    Next

    MsgBox Mensagem
End Sub


Como você percebeu, fiz todas as considerações importantes estão no próprio código. O resultado será este:





OBS: Não se esqueça! Depois que fizer os testes do código, será necessário digitar os nomes antigos das  planilhas, sob pena dos códigos dos exemplos anteriores deste curso não funcionarem corretamente corretamente.

Com este 5º EXEMPLO, finalizamos o estudo básico da estrutura FOR-EACH-NEXT e dos LOOP’S.

Talvez você não tenha encontrado até o momento, aplicabilidade para as estruturas de decisão e repetição que estudamos. E isto é perfeitamente compreensível meus caros ladies e gentleman. A construção de um sistema perfeitamente funcional exige a aplicação de todos os conceitos que aprendemos até o momento, assim como a aplicação simultânea das estruturas de decisão e repetição.

Logo, aprenderemos como mesclar essas estruturas para elaborar nossos sistemas e você verá o poder do Visual Basic for Application(VBA). EM BREVE!!! NESTE BLOG!!!

HASTA LA VISTA AMIGOS!!!!


Para acessar o curso completo Clique aqui