Página 1 de 1

Problema ListBox VBA

Enviado: 07 Ago 2017 às 13:23
por kleinowski
Boa Tarde!
Estou fazendo uma planilha para otimizar a busca de materiais aqui na empresa. Montei todos os userforms e os textbox como eu queria, está tudo funcionando menos a busca no ListBox. Segue o código.

'Define TextoBox1
Private Sub TextBox1_Change()
TextoDigitado = TextBox1.Text
Call Busca_TextBox1
End Sub


'Busca TextBox1
Private Sub Busca_TextBox1()
Dim ws As Worksheet
Dim i As Integer
Dim TextoCelula As String
Set ws = ThisWorkbook.Worksheets("AÇO P20")
i = 2 'linha

ListBox1.Clear
With ws
While .Cells(i, 1).Value <> Empty
TextoCelula = .Cells(i, 3).Value
If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then
ListBox1.AddItem .Cells(i, 3) ' Coluna
End If
TextBox1.SetFocus
i = i + 1
Wend
End With
End Sub

'Função Scrool
Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Not Me.ActiveControl Is Me.ListBox1 Then
Me.ListBox1.SetFocus
End If
HookListBoxScroll
End Sub

'Carrega UserForm e Dados do ListBox
Private Sub UserForm_Initialize()
Busca_TextBox1
End Sub

Com o código do jeito que está ele carrega todos os comprimentos dos materiais e mostra no userform, quando eu digito um valor ele vai filtrando o que digitei no TextBox1 e vai mostrando no UserForm.
Até ai tudo certo, só que eu tenho mais 3 colunas que eu gostaria que aparece-se que são (Largura) (Altura) (Código) só que quando carrega o userform só mostra os valores do comprimento.
Teria como fazer isso, minha ideia é que eu digite por exemplo 300 de largura e ele mostre todos os materiais com aquela largura, depois junto com os 300 eu quero 50 de altura e assim ele vai filtrando tudo... Já bati cabeça aqui e não consegui achar uma maneira de fazer isso.

Em Anexo tem a planilha.

Problema ListBox VBA

Enviado: 08 Ago 2017 às 13:20
por kleinowski
Alguém poderia me ajudar com esse código?

Re: Problema ListBox VBA

Enviado: 11 Ago 2017 às 12:22
por wesleyribeiro123
Kleinowski
Boa tarde,

Espero ter conseguido lhe ajudar.
Fiz toda a programação no Form "Busca_Manual_Aço_P20".

Faça seus testes e verifique o código.

Problema ListBox VBA

Enviado: 11 Ago 2017 às 13:24
por kleinowski
wesleyribeiro123
Boa Tarde

Era isso mesmo, só tem uma coisa, se eu digitar algo no textbox1 e depois apagar ele carrega novamente os valores no listbox, se eu digitar algo no textbox2 ou 3 e depois apagar o listbox fica em branco.

Problema ListBox VBA

Enviado: 11 Ago 2017 às 13:42
por wesleyribeiro123
Ele não retorna a Pesquisa do TextBox1...
Apenas chame a Sub BuscaTextbox1 e BuscaTextbox2

Veja no anexo...

Re: Problema ListBox VBA

Enviado: 18 Ago 2017 às 12:00
por kleinowski
Funcionou!

Só mais uma coisa, tem alguma maneira de quando eu der um duplo clique na linha do listbox ele copiar o valor da coluna 3 para a área de Transferencia do Windows?

Re: Problema ListBox VBA

Enviado: 21 Ago 2017 às 10:24
por wesleyribeiro123
Brother

Veja se era isso...

Re: Problema ListBox VBA

Enviado: 21 Ago 2017 às 16:36
por kleinowski
Wesleyribeiro123

Estou tendo um problema com esse código.

'Define TextoBox1
Private Sub TextBox1_Change()
TextoDigitado = TextBox1.Text
Call Busca_TextBox1
End Sub

'Busca TextBox1
Private Sub Busca_TextBox1()
Dim ws As Worksheet
Dim i As Integer, Y As Integer
Dim TextoCelula As String
Set ws = ThisWorkbook.Worksheets("ZAMAK PS - PM")
i = 2 'linha
Y = 0 'indice ListBox
ListBox1.Clear
With ws
While .Cells(i, 1).Value <> Empty
TextoCelula = .Cells(i, 3).Value
If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then
ListBox1.AddItem .Cells(i, 3) 'Coluna1 (Comprimento)
ListBox1.List(Y, 1) = .Cells(i, 4) 'Coluna2 (Largura)
ListBox1.List(Y, 2) = .Cells(i, 5) 'Coluna3 (Espessura)
ListBox1.List(Y, 3) = .Cells(i, 6) 'Coluna4 (Código)
ListBox1.List(Y, 4) = .Cells(i, 2) 'Coluna5 (Descrição)
Y = Y + 1
TextBox1.SetFocus
End If
i = i + 1
Wend
End With
End Sub


'Define TextoBox2
Private Sub TextBox2_Change()
TextoDigitado2 = TextBox2.Text
Call Busca_TextBox2
End Sub

'Busca TextBox2
Private Sub Busca_TextBox2()
On Error Resume Next
Dim vCB As Integer, Y As Integer
vCB = ListBox1.ListCount - 1 'qtdade de itens na ListBox
Y = 0 'indice ListBox

With ListBox1
While Y <= vCB
If Left(.List(Y, 1), Len(TextoDigitado2)) <> TextoDigitado2 * 1 Then
.RemoveItem (Y)
vCB = ListBox1.ListCount - 1
Y = 0
GoTo CONTINUAR
End If
Y = Y + 1

CONTINUAR:
Wend
End With
If TextoDigitado2 = Empty Then
Call Busca_TextBox1
End If
TextBox2.SetFocus
On Error GoTo 0
End Sub


'Define TextoBox3
Private Sub TextBox3_Change()
TextoDigitado3 = TextBox3.Text
Call Busca_TextBox3
End Sub

'Busca TextBox3
Private Sub Busca_TextBox3()
On Error Resume Next
Dim vCB As Integer, Y As Integer
vCB = ListBox1.ListCount - 1 'qtdade de itens na ListBox
Y = 0 'indice ListBox

With ListBox1
While Y <= vCB
If Left(.List(Y, 2), Len(TextoDigitado3)) <> TextoDigitado3 * 1 Then
.RemoveItem (Y)
vCB = ListBox1.ListCount - 1
Y = 0
GoTo CONTINUAR
End If
Y = Y + 1
CONTINUAR:
Wend
End With
If TextoDigitado3 = Empty Then
Call Busca_TextBox1
Call Busca_TextBox2
End If
TextBox3.SetFocus
On Error GoTo 0
End Sub

Ele faz a busca no listbox da planilha.
Eu tenho 3 textbox para colocar os valores e filtrar na listbox.
O problema é que quando eu digito no textbox 2 e 3, o filtro funciona. Se eu fizer a busca na ordem TextBox1, 2, 3 ele também funciona, só que se eu digitar no TextBox2, 3 e depois digitar no textbox1 ele ignora o que ja foi digitado e começa outra busca.

Tem como arrumar isso?

Re: Problema ListBox VBA

Enviado: 24 Ago 2017 às 07:30
por kleinowski
Teria como arrumar isso?