segunda-feira, 20 de maio de 2013

FAZER A IMAGEM BRILHAR QUANDO PASSAR O MOUSE

MUDAR ASPECTO DA IMAGEM AO PASSAR O MOUSE.


Visitem meu novo blog:

https://programacaopassoapasso.wordpress.com/



A ideia é imitar sabe aqueles programas mais sofisticados que você passa o mouse sobre os objetos e eles mudam de cor, brilho,  sombra e vários outros efeitos legais. Isso nada mais é do que, truques kkkk

Bem para fazer a imagem mudar vamos ter que usar 2 imagens uma que irá aparecer sempre, e a outra que vai aparecer só quando o mouse estiver sobre ela....

Então para ensinar isso aqui vou usar as seguintes imagens:



Notem que a primeira esta sem brilho, já a segunda está um pouco elaborada... assim sendo vamos inserir as duas imagens e tentar colocar o mais próximo possível, uma encima da outra. 

Para isso vamos inserir 2 objetos image, e na propriedade Picture de cada um deles vamos colocar as 2 imagens sendo uma para cada objeto, em seguida colocamos um image encima do outro:


Só para ficar mais fácil de compreender, no objeto image1 eu coloquei a imagem sem brilho e no objeto image2 eu coloquei a imagem sem o brilho.

Para o objeto image2, vamos alterar a propriedade Visible para False, assim só será exibida a image1.

Agora para que ao mover o mouse sobre o image1, o image2 seja exibido vamos usar o seguinte código.Quse será executado quando o mouse se mover sobre o objeto image1.


Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

End Sub


Agora dentro desse código vamos exibir a image2 e ocultar e image1.

Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Me.Image2.Visible = True
Me.Image1.Visible = False

End Sub


Pronto agora , basta executar e ver se esta funcionando...

Para reverter a situação ou seja quando o mouse sair da imagem, teremos que fazer o mesmo código só que no evento mousemove do userform, e trocando as ações, ocultando a image2 e exibido novamente a image1.



Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Me.Image2.Visible = False
Me.Image1.Visible = True

End Sub


Basta executar e mover o mouse sobre a imagem e depois retirar kkkk


COLOCAR LEGENDA EM OBJETOS,COMO TEXTBOX, COMBOBOX, BOTÕES ENTRE OUTROS

LEGENDA EM OBJETOS


Olá, galera vou falar hoje de uma propriedade bem legal que tem em vários objetos no Excel VBA, a propriedade ControlTipText.

Essa propriedade serve para orientar o usuário, tipo sempre que o mouse repousar por alguns instantes sobre o objeto ela será ativada veja o exemplo abaixo.


Isso aí, vlw e até mais...

sexta-feira, 17 de maio de 2013

O CÓDIGO VBA QUE MUDOU MEU JEITO DE PROGRAMAR

DO UNTIL... LOOP

Esse código eu acho sensacional, pois me permite uma série de coisas, agora vou ensinar como ele funciona. É o seguinte, serve para repetir uma serie de códigos quantas vezes você determinar.

Vamos fazer nesse exemplo, uma serie com 5 repetições, sendo que você pode determinar quantas vezes quer a repetição, ou pode colocar de forma automática, exemplo fazer até que tal célula seja vazia, assim o código vai ir até quando a condição for falsa. 

O objetivo é digitar um nome em um textbox e exibir uma mensagem dizendo em qual linha o nome está, caso o nome digitado nao esteja na tabela então a mensagem dirá "NOME NAO ENCONTRADO" vejam:

Bom para o exemplo criei o seguinte userform....






criei a seguinte tabela na plan1.


Agora vou criar um código dentro do evento click do botão botao_verificar



Private Sub BOTAO_VERIFICAR_Click()

End Sub

Em seguida devemos criar uma variável de tipo inteiro e atribuir um valor inicial a mesma. Geralmente o valor inicial é igual ao numero da primeira linha a ser verificada pelo laço de repetição Do Until... Loop.


Private Sub BOTAO_VERIFICAR_Click()

Dim linha As Integer
linha = 2

End Sub



Depois vamos criar o laço de repetição, sendo que o mesmo vai ser repetido apenas por 5 vezes assim sendo como a variavel já tem o valor inicial como 2, então o código Do Until...Loop será executado até que a variável tenha o valor igual a 7.


Private Sub BOTAO_VERIFICAR_Click()
Dim linha As Integer
linha = 2
Do Until linha = 7

linha = linha + 1

Loop
End Sub


Pronto agora sabendo que o laço vai se repetir por 5 vezes isso quer dizer que vai passar uma vez em cada linha afinal a tabela tem apenas 5 registros. Vamos por um código IF para verificar se o valor digitado no objeto TextBox de nome TXT_BUSCA corresponde a uma das 5 linhas na plan1 na coluna "A", sendo que o código vai verificar linha por linha....

Private Sub BOTAO_VERIFICAR_Click()
Dim linha As Integer
linha = 2
Do Until linha = 7
If Me.TXT_BUSCA.Text = Plan1.Range("a" & linha).Value Then

Else

linha = linha + 1

End If

Loop
End Sub


Agora caso os nomes sejam iguais em algum momento do laço, eu quero que seja exibida uma mensagem dizendo "O NOME DIGITADO ESTÁ NA LINHA " aí vai aparecer junto o numero do linha. 


Private Sub BOTAO_VERIFICAR_Click()
Dim linha As Integer
linha = 2
Do Until linha = 7
If Me.TXT_BUSCA.Text = Plan1.Range("a" & linha).Value Then
MsgBox "O NOME DIGITADO ESTÁ NA LINHA " & linha
Else

linha = linha + 1
End If

Loop
End Sub


Agora já que o que eu quero foi efetuado eu vou encerrar a rotina.

Private Sub BOTAO_VERIFICAR_Click()
Dim linha As Integer
linha = 2
Do Until linha = 7
If Me.TXT_BUSCA.Text = Plan1.Range("a" & linha).Value Then
MsgBox "O NOME DIGITADO ESTÁ NA LINHA " & linha
Exit Sub
Else

linha = linha + 1
End If

Loop
End Sub


Agora suponhamos que o laço chegue ao fim sem encontrar nenhuma linha com o mesmo nome que foi digitado no objeto textbox, então eu quero exibir uma nova mensagem dizendo "O NOME DIGITADO NÃO ESTA NA TABELA".


Private Sub BOTAO_VERIFICAR_Click()



Dim linha As Integer
linha = 2
Do Until linha = 7
If Me.TXT_BUSCA.Text = Plan1.Range("a" & linha).Value Then
MsgBox "O NOME DIGITADO ESTÁ NA LINHA " & linha
Exit Sub
Else

linha = linha + 1
End If

Loop
MsgBox "O NOME DIGITADO NAO ESTA NA TABELA", vbExclamation

End Sub


Isso aí agora basta executar o userform digitar o nome desejad e clicar no botão... Sendo que a comparação irá diferenciar as letras maiúsculas das minúsculas kkkkk

quinta-feira, 16 de maio de 2013

APOSTILA VBA CONTROLE DE ESTOQUE PASSO A PASSO

CONTROLE ESTOQUE VBA


Visitem meu novo blog:

https://programacaopassoapasso.wordpress.com/


Galera, boa noite a todos, hoje vou fazer ma promoção kkkkkkkkkkk estou desenvolvendo uma apostila onde ensino passo a passo a criação de um controle de estoque, e preciso saber a opinião alheia, assim sendo os três primeiros leitores que comentarem este post dizendo o que estão achando do meu blog, eu vou enviar uma cópia gratuita da apostila (preciso do e-mail de voces enviem para edivan.cabral@yahoo.com.br) , sendo que após o terminarem de fazer o controle de estoque me deem as suas opiniões sobre a apostila se está fácil de aprender ou não  o que esta faltando para que eu possa fechar e divulgar a criação da mesma....


Aguardo voces kkk

Até mais e boa noite!

EXCEL VBA, CARREGAR DADOS POR NOME OU POR CÓDIGO NO MESMO OBJETO.

CARREGAR PRODUTO ATRAVÉS DA DESCRIÇÃO OU O CÓDIGO

Visitem meu novo blog:

https://programacaopassoapasso.wordpress.com/



Olá, galera dessa vez vou ensinar um código que eu uso muito em meus projetos que funciona da seguinte maneira, em um determinado banco de dados eu tenho os códigos dos produtos e a descrição. Então essa macro vai fazer o seguinte: Se você digitar o nome do produto vai aceitar numa boa e se você resolver digitar o código do produto ela vai retornar o nome que corresponde ao código, e o mais interessante é que retorna dentro do mesmo objeto que você digitou o código.... então para ilustrar isso eu criei a seguinte tabela na Plan1.



Em seguida criei um formulário simples contendo apenas um combobox e um botão de comando vejam:

A primeira coisa a se fazer é criar uma rotina de códigos para preencher o combobox1 com os dados contido na coluna B da plan1.

então vamos lá:
O código deve ser feito no evento INITIALIZE do userform assim no ato de sua abertura o combobox será carregado automaticamente.

Dentro da rotina devemos criar uma variável que servirá para fazer uma passagem em toda a tabela, e geralmente eu a chamo de linha...
na segunda linha do código em vermelho informamos qual será o valor inicial da variável,  que deve ser o numero da primeira linha que tem os dados que serão copiados para o combobox.

Private Sub UserForm_Initialize()

Dim linha As Integer
linha = 2

End Sub


Em seguida devemos criar o laço de repetição que é feito com o código Do Until.... Loop. Sendo que para esse exemplo vamos percorrer toda a plan1, na coluna A linha por linha até encontrar a primeira range(célula) vazia.... vejam:


Private Sub UserForm_Initialize()

Dim linha As Integer
linha = 2

Do Until Plan1.Range("A" & linha).Value = ""



linha = linha + 1
Loop
End Sub

Do Until..... manda o código  passar na pan1 na range(célula) da coluna A e na linha que tiver o mesmo numero da variável que na primeira passagem = 2.

linha = linha + 1 manda o código somar 1 ao valor atual da variável  isso faz com que na próxima vez que o Do Until se iniciar a linha será = 3 e assim por diante.

Loop manda o código voltar ao Do Until.... dessa forma esse código vai ficar rodando na tabela até passar por todas as linhas que não forem vazias afinal o critério para o código para é a primeira célula vazia que encontrar então sairá do laço de repetição, já deu para sacar que todas as linhas que tiverem informações tem que estar uma embaixo da outra, não podendo haver células vazias no meio de células preenchidas..

Continuando, vamos colocar o código que adiciona ao objeto combobox os valores da plan1, na range (célula) da coluna B junto com a linha "X".


Private Sub UserForm_initialize()

Dim linha As Integer
linha = 2

Do Until Plan1.Range("A" & linha).Value = ""

Me.ComboBox1.AddItem Plan1.Range("B" & linha).Value

linha = linha + 1
Loop
End Sub

Pronto a linha inserida no código manda que em cada passagem do laço, ele pegar o valor contido na célula da coluna B & numero representado pela variavel linha e em seguida adicionar ao objeto combobox1. Vamos executar o userform e vejamos o resultado.

Pois bem, agora vamos criar o código para puxar o produto pelo código do mesmo, esse código de programação será inserido no evento afterupdate do objeto combobox, ou seja assim que voce digitar o código do produto e dar um enter, ele vai puxar a descrição do produto para o corpo do objeto combobox1.
Como teremos que percorrer toda a tabela em busca do código digitado, vamos usar um laço de repetição novamente, então a primeira coisa a se fazer é criar a variavel e atribuir o valor inicial da mesma.

Private Sub ComboBox1_afterupdate()
Dim linha As Integer
linha = 2

End Sub


Em seguida vamos criar o laço de repetição que pode ser o mesmo usado no código anterior.


Private Sub ComboBox1_afterupdate()
Dim linha As Integer
linha = 2

Do Until Plan1.Range("A" & linha).Value = ""


linha = linha + 1
Loop

End Sub

Em seguida vamos colocar um bloco IF antes do laço de repetição, para verificar se o valor digitado pelo usuário é um  numero, por que se for um texto então não irá executar a busca pelo código e vai encerrar a rotina através do código Exit Sub.

Private Sub ComboBox1_afterupdate()

Dim linha As Integer
linha = 2

If IsNumeric(Me.ComboBox1.Text) = False Then
Exit Sub
Else
End If

Do Until Plan1.Range("A" & linha).Value = ""




linha = linha + 1
Loop

End Sub

Agora vamos colocar código If dentro do laço de repetição para verificar se o valor da célula (A+linha) é igual ao digitado no objeto combobox, se for vai pegar o valor ao lado no caso, coluna (B+linha) e vai colocar na propriedade Text do objeto combobox. Em seguida devemos colocar o código para encerrar a rotina que é o Exit Sub.

Private Sub ComboBox1_afterupdate()
Dim linha As Integer
linha = 2

If IsNumeric(Me.ComboBox1.Text) = False Then
Exit Sub
Else
End If

Do Until Plan1.Range("A" & linha).Value = ""

If Plan1.Range("A" & linha).Value = Me.ComboBox1.Text Then
Me.ComboBox1.Text = Plan1.Range("B" & linha).Value
Exit Sub
Else
End If

linha = linha + 1
Loop

End Sub


Agora para encerrarmos o nosso código, vamos inserir após o código Loop, um código que exibirá uma mensagem avisando ao usuário que o código não foi encontrado, afinal se ele for encontrado então o laço de repetição vai ser encerrado junto com a rotina por meio do código Exit Sub, assim sendo essa mensagem só será exibida caso o laço chegue ao fim, e se isso acontecer é por o código digitado não foi encontrado.


Private Sub ComboBox1_afterupdate()
Dim linha As Integer
linha = 2

If IsNumeric(Me.ComboBox1.Text) = False Then
Exit Sub
Else
End If

Do Until Plan1.Range("A" & linha).Value = ""

If Plan1.Range("A" & linha).Value = Me.ComboBox1.Text Then
Me.ComboBox1.Text = Plan1.Range("B" & linha).Value
Exit Sub
Else
End If

linha = linha + 1
Loop

MsgBox "CÓDIGO NÃO ENCONTRADO", vbCritical

End Sub


Agora basta executar o userform, digitar um código e dar um enter, e ver o resultado...

segunda-feira, 13 de maio de 2013

FÓRMULA QUE SUBSTITUI PROCV

FUNCIONA COMO PROCV




Visitem meu novo blog:

https://programacaopassoapasso.wordpress.com/




Galera vou ensinar hoje uma combinação de fórmulas que eu aprendi com um cara fodasssso mesmo no Yahoo Respostas. Acho que acima do que sabemos está a simplicidade de poder compartilhar com o próximo e ajudar tantas e tantas pessoas que assim como eu estão aí para aprender cada vez mais.

A ideia dessa combinação é fazer exatamente o que o Procv faz porém ela é muito mais interessante, exemplo:



Bom vou explicar o resultado desejado e em seguida a fórmula, o que quero é o seguinte veja a imagem abaixo.


Preciso que ao digitar um determinado nome, na célula que está marcada com um "x" as demais células me retornem os valores que correspondem ao nome digitado.

Vou usar 2 fórmulas (CORRESP e ÍNDICE)

> A fórmula  "corresp"  tem a função de descobrir qual é a posição de um item em relação a uma tabela exemplo: na tabela que teho as informações o meu nome EDIVAN é o primeiro item da lista então o corresp vai retornar "1" pois é o texto procurado esta ocupando a posição 1.

> Na célula ao lado da marcada com o x, na coluna "B" vamos inserir a fórmula corresp.... que ficaria assim:


=CORRESP(
inicio da fórmula....
$A$11  célula que é a referencia, onde será digitado o texto procurado.

$A$2:$A$7   área que tem as informações

pronto como não há informação na célula de referencia o resultado será #N/D a diante vamos corrigir isso, mas por agora vamos digitar um nome que contém na tabela ex:

Veja que o numero retornado foi o 3, sendo que ANA MARIA está na terceira linha do intervalo demarcado na fórmula ($A$2:$A$7)

Pronto agora vamos partir para a fórmula ÍNDICE que tem a função de retornar um determinado valor que está na linha "x" da coluna "x".


Vamos inserir antes de CORRESP a fórmula ÍNDICE pois o numero da linha será o valor gerado pela fórmula CORRESP e a coluna será "1" vamos lá então...



=ÍNDICE(

$B2:$B7  Aqui determinamos qual será a area com os dados a serem retornados.


o corresp está informando ao índice qual é a linha

 no final da fórmula tem ;1) que esta informando qual é o numero da coluna, como temos uma unica coluna no intervalo azul,vamos usar o numero 1.

e o resultado deverá ser este:


Vamos copiar a fórmula e colar para a IDADE e o SEXO.

VEJA: IDADE...
 Reparem que a unica coisa que mudou foi a referencia em azul pois agora a coluna que terá o valor retornado será a coluna "C".


SEXO...

Pronto eu achei essa fórmula mais funcional do que a procv.


Para corrigir o Erro #N/D vamos fazer a seguinte fórmula...

=SE(ÉERROS(FÓRMULA);"";MESMA_FÓRMULA)


Veja pronto como ficaria para a coluna SOBRENOME:

=SE(ÉERROS(ÍNDICE($B2:$B7;CORRESP($A$11;$A$2:$A$7;0);1));"";ÍNDICE($B2:$B7;CORRESP($A$11;$A$2:$A$7;0);1))

Basta repetir nas demais assim, caso seja digitado um nome que nao existe na tabela ou mesmo a célula da busca esteja vazia não vai retornar nada...



Galera espero que tenham compreendido e o mais importante consigam adaptar as próprias necessidades.


vlw até mais

Dúvidas postem comentãrios ou mandem e-mail para mim edivan.cabral@yahoo.com.br

Edivan Cabral


sexta-feira, 3 de maio de 2013

Galera, Dúvidas????

Bom galera desculpem a ausência que eu estou do meu blog, mas é que não estou tendo mais tanto tempo disponível para postar nada kkkkk... mas se acaso alguem precisar de alguma ajuda, desde que não seja gradiosa ou dificil kkkkkkkkkk mande no meu e-mail edivan.cabral@yahoo.com.br na medidado possivel irei vendo e tentando ajudar...


Acontece que estou trabalhando no desenvolvimento de um video curso onde ensinarei a criar passo a passo um controle de estoque em VBA....


At; Edivan Cabral