Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)
Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)
Boas Tardes a todos
volto a precisar de ajuda pois não estou a conseguir fazer o que pretendo e já penso que não vou conseguir
é o seguinte
no ficheiro em anexo pretendo fazer a pesquisa pelos campos da pesquisa
exemplo
por data por mês etc
e depois por data e mês e tipo formação etc
e data , mês, tipo formação, formação etc e assim ate chegar a pesquisa por todos
não sei como fazer pois o excel já não me deixa adicionar mais código existe alguma maneira de fazer o que pretendo de forma mais simples
obrigado fico a aguardar ajuda
volto a precisar de ajuda pois não estou a conseguir fazer o que pretendo e já penso que não vou conseguir
é o seguinte
no ficheiro em anexo pretendo fazer a pesquisa pelos campos da pesquisa
exemplo
por data por mês etc
e depois por data e mês e tipo formação etc
e data , mês, tipo formação, formação etc e assim ate chegar a pesquisa por todos
não sei como fazer pois o excel já não me deixa adicionar mais código existe alguma maneira de fazer o que pretendo de forma mais simples
obrigado fico a aguardar ajuda
- Anexos
-
- Arquivo Formações.7z
- (132.57 KiB) Baixado 198 vezes
Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)
amigos
ou estou muito errado ou o meu problema era simples
podem me ver se esta codigo é mesmo assim isto depois de ter colocado uma pesquisa para cada opção
adicionei depois este codigo e pelo que estou a testar é o que pretendo so nao estou a acreditar ser uma soluçao tao simples
'filtrar todos
If pesquisadata.Text >= "" And pesquisames.Text >= "" And pesquisatipoformacao.Text >= "" And pesquisaformacao.Text >= "" And pesquisadisciplina.Text >= "" And pesquisasubunidades.Text >= "" And Pesquisalocal.Text >= "" And pesquisaformador.Text >= "" And pesquisaformandos.Text >= "" Then
ListView1.ListItems.Clear
textoDigitado = pesquisadata.Text
textoDigitado1 = pesquisames.Text
textoDigitado2 = pesquisatipoformacao.Text
textoDigitado3 = pesquisaformacao.Text
textoDigitado4 = pesquisadisciplina.Text
textoDigitado5 = pesquisasubunidades.Text
textoDigitado6 = Pesquisalocal.Text
textoDigitado7 = pesquisaformador.Text
textoDigitado8 = pesquisaformandos.Text
'código que irá filtrar os nomes
linha = 2
linhatabela = 1
While Folha1.Cells(linha, 1).Value <> Empty
TextoCelula = Folha1.Cells(linha, 2).Value
TextoCelula1 = Folha1.Cells(linha, 8).Value
TextoCelula2 = Folha1.Cells(linha, 4).Value
TextoCelula3 = Folha1.Cells(linha, 3).Value
TextoCelula4 = Folha1.Cells(linha, 9).Value
TextoCelula5 = Folha1.Cells(linha, 5).Value
TextoCelula6 = Folha1.Cells(linha, 7).Value
TextoCelula7 = Folha1.Cells(linha, 6).Value
TextoCelula8 = Folha1.Cells(linha, 10).Value
'quebra a palavra atual pela esquerda conforme a quantidade de letras digitadas e compara com o texto digitado
If InStr(UCase(TextoCelula), UCase(textoDigitado)) > 0 Then
If InStr(UCase(TextoCelula1), UCase(textoDigitado1)) > 0 Then
If InStr(UCase(TextoCelula2), UCase(textoDigitado2)) > 0 Then
If InStr(UCase(TextoCelula3), UCase(textoDigitado3)) > 0 Then
If InStr(UCase(TextoCelula4), UCase(textoDigitado4)) > 0 Then
If InStr(UCase(TextoCelula5), UCase(textoDigitado5)) > 0 Then
If InStr(UCase(TextoCelula6), UCase(textoDigitado6)) > 0 Then
If InStr(UCase(TextoCelula7), UCase(textoDigitado7)) > 0 Then
If InStr(UCase(TextoCelula8), UCase(textoDigitado8)) > 0 Then
'se a comparação for igual será adicionado no formulario
Set Item = ListView1.ListItems.Add(Text:=Folha1.Cells(linha, 1))
Item.SubItems(1) = Folha1.Cells(linha, 2) ' data
Item.SubItems(2) = Folha1.Cells(linha, 3) ' formacao
Item.SubItems(3) = Folha1.Cells(linha, 4) ' tipo formacao
Item.SubItems(4) = Folha1.Cells(linha, 5) ' subunidades
Item.SubItems(5) = Folha1.Cells(linha, 6) ' formador
Item.SubItems(6) = Folha1.Cells(linha, 7) ' local
Item.SubItems(7) = Folha1.Cells(linha, 8) ' mes
Item.SubItems(8) = Folha1.Cells(linha, 9) 'disciplina
Item.SubItems(9) = Format(Folha1.Cells(linha, 11).Value, "hh:mm") 'horas
Item.SubItems(10) = Folha1.Cells(linha, 10) ' formandos
End If
End If
End If
End If
End If
End If
End If
End If
End If
linha = linha + 1
Wend
Exit Sub
End If
contaregistros = "Número de Registos: " & Me.ListView1.ListItems.Count
End Sub
ou estou muito errado ou o meu problema era simples
podem me ver se esta codigo é mesmo assim isto depois de ter colocado uma pesquisa para cada opção
adicionei depois este codigo e pelo que estou a testar é o que pretendo so nao estou a acreditar ser uma soluçao tao simples
'filtrar todos
If pesquisadata.Text >= "" And pesquisames.Text >= "" And pesquisatipoformacao.Text >= "" And pesquisaformacao.Text >= "" And pesquisadisciplina.Text >= "" And pesquisasubunidades.Text >= "" And Pesquisalocal.Text >= "" And pesquisaformador.Text >= "" And pesquisaformandos.Text >= "" Then
ListView1.ListItems.Clear
textoDigitado = pesquisadata.Text
textoDigitado1 = pesquisames.Text
textoDigitado2 = pesquisatipoformacao.Text
textoDigitado3 = pesquisaformacao.Text
textoDigitado4 = pesquisadisciplina.Text
textoDigitado5 = pesquisasubunidades.Text
textoDigitado6 = Pesquisalocal.Text
textoDigitado7 = pesquisaformador.Text
textoDigitado8 = pesquisaformandos.Text
'código que irá filtrar os nomes
linha = 2
linhatabela = 1
While Folha1.Cells(linha, 1).Value <> Empty
TextoCelula = Folha1.Cells(linha, 2).Value
TextoCelula1 = Folha1.Cells(linha, 8).Value
TextoCelula2 = Folha1.Cells(linha, 4).Value
TextoCelula3 = Folha1.Cells(linha, 3).Value
TextoCelula4 = Folha1.Cells(linha, 9).Value
TextoCelula5 = Folha1.Cells(linha, 5).Value
TextoCelula6 = Folha1.Cells(linha, 7).Value
TextoCelula7 = Folha1.Cells(linha, 6).Value
TextoCelula8 = Folha1.Cells(linha, 10).Value
'quebra a palavra atual pela esquerda conforme a quantidade de letras digitadas e compara com o texto digitado
If InStr(UCase(TextoCelula), UCase(textoDigitado)) > 0 Then
If InStr(UCase(TextoCelula1), UCase(textoDigitado1)) > 0 Then
If InStr(UCase(TextoCelula2), UCase(textoDigitado2)) > 0 Then
If InStr(UCase(TextoCelula3), UCase(textoDigitado3)) > 0 Then
If InStr(UCase(TextoCelula4), UCase(textoDigitado4)) > 0 Then
If InStr(UCase(TextoCelula5), UCase(textoDigitado5)) > 0 Then
If InStr(UCase(TextoCelula6), UCase(textoDigitado6)) > 0 Then
If InStr(UCase(TextoCelula7), UCase(textoDigitado7)) > 0 Then
If InStr(UCase(TextoCelula8), UCase(textoDigitado8)) > 0 Then
'se a comparação for igual será adicionado no formulario
Set Item = ListView1.ListItems.Add(Text:=Folha1.Cells(linha, 1))
Item.SubItems(1) = Folha1.Cells(linha, 2) ' data
Item.SubItems(2) = Folha1.Cells(linha, 3) ' formacao
Item.SubItems(3) = Folha1.Cells(linha, 4) ' tipo formacao
Item.SubItems(4) = Folha1.Cells(linha, 5) ' subunidades
Item.SubItems(5) = Folha1.Cells(linha, 6) ' formador
Item.SubItems(6) = Folha1.Cells(linha, 7) ' local
Item.SubItems(7) = Folha1.Cells(linha, 8) ' mes
Item.SubItems(8) = Folha1.Cells(linha, 9) 'disciplina
Item.SubItems(9) = Format(Folha1.Cells(linha, 11).Value, "hh:mm") 'horas
Item.SubItems(10) = Folha1.Cells(linha, 10) ' formandos
End If
End If
End If
End If
End If
End If
End If
End If
End If
linha = linha + 1
Wend
Exit Sub
End If
contaregistros = "Número de Registos: " & Me.ListView1.ListItems.Count
End Sub
Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)
alias apliquei esse codigo logo a seguir ao loop
Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)
logo vi que a coisa nao esta muito bem
agora não soma corretamente na pesquisa ao iniciar o userform mas soma correto na filtragem não estou a perceber
agora não soma corretamente na pesquisa ao iniciar o userform mas soma correto na filtragem não estou a perceber
- Reinaldo
- Jedi
- Mensagens: 1537
- Registrado em: Sex Ago 01, 2014 4:09 pm
- Localização: Garça - SP / SCS - SP
Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)
Lembro de já haver visto algo parecido com esse projeto; mas vamos lá
Aplicação de filtro é algo relativamente simples, porem deve se observado alguns detalhes importantes.
O mais importante e quando será aplicado/iniciado esse filtro.
Aplicação Filtro em campo numérico e "ligeiramente" diferente da aplicação em campos Texto.
Em um campo texto é possível a cada digitação de caractere "ir filtrando" os dados (algo que particularmente não gosto), já um campo numérico não aceita essa possibilidade.
Para efetuar qualquer proposta primeiro e necessário entender/conhecer a base; como seu modelo não há valores fica difícil saber o que e numérico texto ou ambos.
Vou tentar entender sua rotina locais de chamamento da rotina/execução, antes de qq proposta
Contudo vale ressaltar:
Apenas um trecho
A informação desse trecho indica "Apenas data", porem a comparação e utilizada a função InStr, que
"Retorna uma Variant (Long) que especifica a posição da primeira ocorrência de uma sequência de caracteres dentro de outra";
como disse anteriormente essa "comparação" não funciona com números; assim e preciso uma forma diferente de comparação ou de pesquisa.
ao final desse trecho mas ainda "dentro" do mesmo há a linha/comando "exit sub"; ou seja sai da rotina sem executar/ler as demais linhas;
asism o comando ==>contaregistros = "Número de Registos: " & Me.ListView1.ListItems.Count logo após o Endif não é executado.
Forneça seu modelo com alguns registros (dados ficticios, mas representativo do constante em cada coluna) bem como da necessidade de cada "filtro/consulta" ocorrer em que momento, Tipo acionar um botão,saida do campo, digitação ....
Aplicação de filtro é algo relativamente simples, porem deve se observado alguns detalhes importantes.
O mais importante e quando será aplicado/iniciado esse filtro.
Aplicação Filtro em campo numérico e "ligeiramente" diferente da aplicação em campos Texto.
Em um campo texto é possível a cada digitação de caractere "ir filtrando" os dados (algo que particularmente não gosto), já um campo numérico não aceita essa possibilidade.
Para efetuar qualquer proposta primeiro e necessário entender/conhecer a base; como seu modelo não há valores fica difícil saber o que e numérico texto ou ambos.
Vou tentar entender sua rotina locais de chamamento da rotina/execução, antes de qq proposta
Contudo vale ressaltar:
Apenas um trecho
Código: Selecionar todos
'apenas data com filtro
If pesquisames.Text = "" And pesquisatipoformacao.Text = "" And Pesquisalocal.Text = "" And _
pesquisaformacao.Text = "" And pesquisadisciplina.Text = "" And pesquisaformador.Text = "" And _
pesquisasubunidades.Text = "" And pesquisaformandos.Text = "" Then
ListView1.ListItems.Clear
textoDigitado = pesquisadata.Text
'código que irá filtrar os nomes
linha = 2
linhatabela = 1
While Folha1.Cells(linha, 1).Value <> Empty
TextoCelula = Folha1.Cells(linha, 2).Value
'quebra a palavra atual pela esquerda conforme a quantidade de letras digitadas e compara com o texto digitado
If InStr(UCase(TextoCelula), UCase(textoDigitado)) > 0 Then
'se a comparação for igual será adicionado no formulario
Set Item = ListView1.ListItems.Add(Text:=Folha1.Cells(linha, 1))
Item.SubItems(1) = Folha1.Cells(linha, 2) ' data
Item.SubItems(2) = Folha1.Cells(linha, 3) ' formacao
Item.SubItems(3) = Folha1.Cells(linha, 4) ' tipo formacao
Item.SubItems(4) = Folha1.Cells(linha, 5) ' subunidades
Item.SubItems(5) = Folha1.Cells(linha, 6) ' formador
Item.SubItems(6) = Folha1.Cells(linha, 7) ' local
Item.SubItems(7) = Folha1.Cells(linha, 8) ' mes
Item.SubItems(8) = Folha1.Cells(linha, 9) 'disciplina
Item.SubItems(9) = Format(Folha1.Cells(linha, 11).Value, "hh:mm") 'horas
Item.SubItems(10) = Folha1.Cells(linha, 10) ' formandos
End If
linha = linha + 1
Wend
Exit Sub
End If
contaregistros = "Número de Registos: " & Me.ListView1.ListItems.Count
...
"Retorna uma Variant (Long) que especifica a posição da primeira ocorrência de uma sequência de caracteres dentro de outra";
como disse anteriormente essa "comparação" não funciona com números; assim e preciso uma forma diferente de comparação ou de pesquisa.
ao final desse trecho mas ainda "dentro" do mesmo há a linha/comando "exit sub"; ou seja sai da rotina sem executar/ler as demais linhas;
asism o comando ==>contaregistros = "Número de Registos: " & Me.ListView1.ListItems.Count logo após o Endif não é executado.
Forneça seu modelo com alguns registros (dados ficticios, mas representativo do constante em cada coluna) bem como da necessidade de cada "filtro/consulta" ocorrer em que momento, Tipo acionar um botão,saida do campo, digitação ....
Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)
Ok vou preencher o ficheiro com dados reais para que me possas ajudar corretamente
Desde ja muito mas muito obrigado
Desde ja muito mas muito obrigado
Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)
Amigo conforme falámos envio o arquivo com dados preenchidos para que me possas ajudar correctamente
desde já muito obrigado pela disponibilidade e ajuda
desde já muito obrigado pela disponibilidade e ajuda
- Anexos
-
- Arquivo.7z
- (115.11 KiB) Baixado 199 vezes
- Reinaldo
- Jedi
- Mensagens: 1537
- Registrado em: Sex Ago 01, 2014 4:09 pm
- Localização: Garça - SP / SCS - SP
Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)
Considerando os tipos de dados em seu modelo
Experimente:
Experimente:
Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)
amigo tive de eliminar esta linha pois não percebo o que lá esta a fazer
Me.Label20.Caption = contaregistros
Me.Label20.Caption = contaregistros