Notifications
Clear all

Macro Consulta com ComboBox em Planilha Excel

8 Posts
2 Usuários
0 Reactions
2,128 Visualizações
(@souzarte)
Posts: 4
Active Member
Topic starter
 

Boa noite à todos,

sou novato aqui no fórum e também nos estudos quanto a VBA. Estou precisando da ajuda de vocês, pois estou construindo uma planilha para o escritório onde trabalho. Tenho uma coluna onde possue alguns dados, os quais serão consultados através de uma ComboBox, até aí tudo bem, pois fiz o objeto reconhecer os dados, contudo, quero que ao digitar o nome da parte, além da Caixa de Combinação que surje os possíveis nomes, também seja selecionada a célula que contenha o nome escrito na Caixa. Alguém pode me dizer como fazer isso, seja via VBA ou Formúla?

Serei muito grato,

Fernando Souza

Uploaded with ImageShack.us

 
Postado : 20/01/2013 10:38 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

souzarte,

Bom Dia!

Minha sugestão é a seguinte:

Para carregar os nomes que você está pesquisando, obviamente, você tem uma rotina com um FOR que faz isso. Assim, sugiro que você coloque no Form, logo acima do combo ou do lado, por exemplo, um Label com a propriedade Caption em branco e, sempre que for encontrando o nome pesquisado (no laço que faz isso), você vai atribuindo a propriedade caption desse Label, o endereço da célula onde está o nome, tipo o comando abaixo:

Label1.Caption = Range ("B" & i).Address

No caso, estou supondo que o nome pesquisado está na oluna B e que a variável contadora do laço é "i".

 
Postado : 21/01/2013 8:01 am
(@souzarte)
Posts: 4
Active Member
Topic starter
 

Boa noite Wagner Morel,

como disse, sou novato aqui e em macro. Então te peço que por favor, se você poder, olha a minha planilha e caso for possível, implementa esse código, pois não consegui entender como devo fazer. Desde já te agradeço muito. O link está abaixo, está hospedado no 4shared.com

Fernando Souza

http://www.4shared.com/file/qNCf87Zn/Ac ... cesso.html

 
Postado : 28/01/2013 7:50 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

souzarte,

Boa Noite!

estava sem internet e só agora vi sua mensagem.

Segue seu arquivo após as devidas modificações.

 
Postado : 31/01/2013 6:19 pm
(@souzarte)
Posts: 4
Active Member
Topic starter
 

Boa noite Wagner Morel,

primeiramente agradeço pelo sua ajuda. Quanto a macro é quase isso que quero, contudo, te pergunto. Há como selecionar a célula que aparece no Caption? Pois ficará difícil se localizar rapidamente quando a planilha estiver com todos os dados.

 
Postado : 31/01/2013 7:13 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Acrescente, dentro do IF, mais uma linha, como abaixo:

        If Range("B" & i).Value = cbNomeParte.Value Then
            Lbl_Cel.Caption = "B" & i
            'Acrescente aqui a linha abaixo
            Range("B" & i).Select
        End If
 
Postado : 01/02/2013 4:14 pm
(@souzarte)
Posts: 4
Active Member
Topic starter
 

Wagner Morel, muito obrigado. Como disse sou novo em vba, poderia me explicar as linhas se não for perder muito o seu tempo?

Dim UltimaLinha, i As Long 'Bem aqui eu sei que vc criou uma variável do tipo inteiro.

UltimaLinha = Sheets("AcompanhamentoProcesso").Cells(Cells.Rows.Count, 2).End(xlUp).Row 'Atribuiu a variável as células da planilha. Me explica exatamente o que significa do ponto e Cell em diante. Estava lendo um pouco sobre o comando Cells.rowns.count, parece que este comando conta as células, mas depois disso não sei nadinha. De qualquer forma explica do início da linha, por favor.

If UltimaLinha < 4 Then UltimaLinha = 4 ' Neste ponto a variável recebe o n. 4, que quer dizer a quarta linha, onde inicia-se os dados na planilha. Certo, até aqui tudo bem!

If cbNomeParte = "" Then Lbl_Cel.Caption = "" 'Aqui vc atriui valor "nada" qd a combo estiver vázia

For i = 4 To UltimaLinha 'Tenho MUITA dificuldade de entender loop "for...next" na prática, por isso sabia que iria precisar fazer um, mas não sabia de que forma. E olha que este é pequeno
If Range("B" & i).Value = cbNomeParte.Value Then 'aqui é uma estrutura if simples, contudo, não imaginei q poderia utilizar o objeto Range desta forma. Ali quando você coloca a letra "B" o excel assume como a coluna por inteiro, certo? e o & (i comercial), no lugar dele eu colocaria uma vírgula, pois para mim quando se faz referência à um intervalo. Explica o por que não colocou a vírgula e qual a diferença neste caso.
Lbl_Cel.Caption = "B" & i 'Aqui dar valor ao Caption
Range("B" & i).Select
End If
Next
End Sub

Desculpe se estou te enchendo de perguntas, mas estou iniciando agora e tenho muitas dúvidas. Então te agradeço desde já.

Fernando Souza

 
Postado : 01/02/2013 4:59 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Fernando,

Bom Dia!

Não se preocupe quanto às perguntas. É natural para quem, está querendo aprender. Aconselho a você a procurar bons livros de VBA para entender melhor os comandos dessa poderosa linguagem de programação. Você não terá diculdades de encontrar na internet milhares de apostilas, livros, CD's e DVD's sobre o assunto. às vezes fica um pouco difícil explicar comandos, mas vou tentar simplificar:

'Aqui estão sendo criadas duas variáveis do tipo Long (um dos tipos do VBA). A variável UltimaLinha que servirá para armazenar  a última linha com dados existente na planilha _
e a variável i que servirá como contador dentro do laço FOR
Dim UltimaLinha, i As Long

'Aqui é armazenado, na variável criada, o número da última linha com dados existente na aba AcompanhamentoProcesso, pela coluna B (o 2 do comando). 
Para facilitar, execute, na interface do Excel, o seguinte: posicione o cursor na última linha da coluna B e depois utilize o comando CTRL + Seta para cima. O Excel sele-
cionará a primeira célula com dados (de baixo para cima). Pois bem, é isso que está sendo feito via código VBA.
UltimaLinha = Sheets("AcompanhamentoProcesso").Cells(Cells.Rows.Count, 2).End(xlUp).Row

'Aqui estamos garantindo que os dados comecem sempre na linha 4 (primeira linha com dados da coluna que queremos procurar. O laço FOR começará pela linha 4 e vai
até a última linha com dados que está armazenada na variável. Se a última linha for menor que 4 (por exemplo, se estiver tudo vazio), ocorrerá um erro logo na primeira
linha do comando FOR pois ele não poderá fazer FOR i = 4 to UltimaLinha se UltimaLinha for menor que o começo que é 4.
If UltimaLinha < 4 Then UltimaLinha = 4

'Aqui estamos verificando se existe alguma coisa digitada no combo (pois o usuário pode começar a digitar e depois se arrepender e apagar tudo). Se não houvesse
esse comando, quando o usuário começasse a digitar um nome a propriedade Caption do Label é atribuída. Se ele apagasse, continuaria mostrando o que foi encontrado, mesmo
não contendo nada no combo.
If cbNomeParte = "" Then Lbl_Cel.Caption = ""

'Aqui é iniciado o laço FOR. Inicia-se o mesmo, atribuindo inicialmente a variável contadora i com o número da primeira linha com dados da coluna que estamos trabalhando. No
caso específico a linha 4. Estamos dizendo ao processador o seguinte: Execute tudo que estiver entre o FOR e o NEXT, "x" vezes (UltimaLinha - 4), começando a contar de quatro até o número que está armazenado na variável UltimaLinha. Então, na primeira passagem do ponteiro do processador por essa linha, é atribúido, a variável i, o número 4 e vai sendo executada linha a linha até que ele encontra o comando NEXT. Daí é atribúido 5, 6, 7, etc, até que a condição do FOR é satisfeita, ou seja, quando i for igual a UltimaLinha.
For i = 4 To UltimaLinha

'Aqui se verifica se o que está contido na célula B + o número da linha (variável i contadora, atribuída na linha anterior do comando FOR) é igual ao que foi selecionado no Combo. Se for, prossegue para a próxima linha.
If Range("B" & i).Value = cbNomeParte.Value Then

'Aqui, uma vez que passou pela linha anterior, então encontramos uma coincidência de valores, logo, precisamos mostrar no Label, através da prorpeiade Caption, onde foi que
essa coincidência foi encontrada. Como estamos procurando na coluna B, dizemos que o Caption é igual a B + a linha onde foi encontrada a coincidência (variável i).
Lbl_Cel.Caption = "B" & i

'Aqui, como você pediu para deixar o cursor na célula onde fosse encontrado o nome, apenas selecionamos a célula encontrada. Coluna B + a variável i.
Range("B" & i).Select 

'Os dois comandos seguintes, finalizam o IF e o FOR. Se a condição do FOR ainda não esrtiver sarisfeita, o laço é reiniciado. Se estiver satisfeita, o ponteiro sai do laço e vai direto para o End Sub, finalizando a execução.
End If
Next


 
Postado : 02/02/2013 12:06 pm