Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
List Box entre Datas
List Box entre Datas
Boa noite Amigos, sou novo no fórum e eu utilizei como modelo, uma planilha que o webmaster disponibilizou em um site onde se criava um formulário contendo um list box e por um combobox e um textbox seria filtrado o que iria aparecer no listbox, isso resolveu 70% do que eu precisava e procurei bastante aqui no fórum se existia uma dúvida semelhante a minha, procurei por vários dias e não encontrei, eu gostaria que esse formulário filtrasse em um text box1 (data inicial) e textbox2 (data final) e pode conter um botao para fazer o filtro do que já foi filtrado, pq ao selecionar o combo box e digitar alguma palavra no text box, o list box já faz o filtro...eu só precisava desse complemento de filtrar as datas e isso já salvaria minha pele pois eu poderia fazer um filtro mensal no combo box(Selecionaria um nome) no texbox( digitaria uma letra ou um nome) e nesse filtro de datas ( o período), não sei se fui claro o suficiente ou se eu soube me expressar corretamente mais deixarei em anexo a planilha para que alguém possa me ajudar ,desculpe o longo texto, é que eu não encontrei nenhuma solução e realmente estou precisando desse filtro isso ajudaria bastante.....
O objetivo é colocar no combo box o nome da empresa, digitar uma letra no textbox.....essa rotina já esta fazendo e ja funciona, ai la embaixo, conseguir filtrar conforme as datas digitadas nos textbox.
Se alguém puder me ajudar ficarei imensamente agradecido!!!
O objetivo é colocar no combo box o nome da empresa, digitar uma letra no textbox.....essa rotina já esta fazendo e ja funciona, ai la embaixo, conseguir filtrar conforme as datas digitadas nos textbox.
Se alguém puder me ajudar ficarei imensamente agradecido!!!
- Anexos
-
- Filtra_ListBox_VBA_Custom.zip
- (806.28 KiB) Baixado 308 vezes
- Reinaldo
- Jedi
- Mensagens: 1537
- Registrado em: Sex Ago 01, 2014 4:09 pm
- Localização: Garça - SP / SCS - SP
Re: List Box entre Datas
Uma possibilidade:
Altere a rotina preenchelista conforme abaixo:
ao digitar uma letra ou nome o filtro:
Se as datas não estiverem preenchidas, será considerado somente a letra ou nome
Se a data inicio estiver preenchida e a data fim não, será considerado todos itens maiores ou iguais a data inicial.
Se a data final estiver preenchida e a inicial não será considerado todos itens menores ou iguais a data final
Para utilizar as datas para o btn filtrar inclua o codigo:
Altere a rotina preenchelista conforme abaixo:
ao digitar uma letra ou nome o filtro:
Se as datas não estiverem preenchidas, será considerado somente a letra ou nome
Se a data inicio estiver preenchida e a data fim não, será considerado todos itens maiores ou iguais a data inicial.
Se a data final estiver preenchida e a inicial não será considerado todos itens menores ou iguais a data final
Código: Selecionar todos
Private Sub PreencheLista(ByVal TextoDigitado As String)
Dim i As Integer, x As Integer
Dim indiceLista As Integer, coluna As Integer
Dim TextoCelula As String
Dim Dt_Ini As Date, Dt_Fim As Date
Dim ws As Worksheet
Dim Lista()
Set ws = ThisWorkbook.Worksheets(NomePlanilha)
ReDim Lista(ws.UsedRange.Columns.Count, 0)
i = LinhaCabecalho + 1
indiceLista = 1
coluna = Me.ComboBoxCampos.ListIndex + 1
Call PreencheCabecalho(Lista)
ListBoxLista.Clear
If Me.TextBox1 = "" Then
Dt_Ini = CDate("1900/12/31")
Else
Dt_Ini = CDate(Format(Me.TextBox1.Text, "yyyy/mm/dd"))
End If
If Me.TextBox2 = "" Then
Dt_Fim = CDate("2950/12/31")
Else
Dt_Fim = CDate(Format(Me.TextBox2.Text, "yyyy/mm/dd"))
End If
With ws
While .Cells(i, coluna).Value <> Empty
TextoCelula = .Cells(i, coluna).Value
If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) And _
.Cells(i, 1) >= Dt_Ini And .Cells(i, 1) <= Dt_Fim Then
For x = 0 To ws.UsedRange.Columns.Count - 1
ReDim Preserve Lista(ws.UsedRange.Columns.Count, indiceLista)
Lista(x, indiceLista) = .Cells(i, x + 1)
Next
indiceLista = indiceLista + 1
End If
i = i + 1
Wend
End With
Lista = Array2DTranspose(Lista)
Me.ListBoxLista.List = Lista
End Sub
Código: Selecionar todos
Private Sub CommandButton1_Click()
Call PreencheLista(TextBoxFiltro.Text)
End Sub
Re: List Box entre Datas
Reinaldo, muito obrigado pela sua ajuda, resolveu sim, com esse exemplo eu adaptei para um formulário que eu estou desenvolvendo com cadastro de clientes, produtos e lançamentos de vendas, alteração de cadastro e exclusão.
Com esse exemplo acima ficou perfeito, agora consigo filtrar todas as colunas por período, vou seguir estudando e assistindo os videos pois gosto muito de VBA e gostaria de me aperfeiçoar.
mais uma vez muito obrigado pela atenção isso vai ajudar muito a minha esposa a controlar as vendas!!!
Abraço!
Alex
Com esse exemplo acima ficou perfeito, agora consigo filtrar todas as colunas por período, vou seguir estudando e assistindo os videos pois gosto muito de VBA e gostaria de me aperfeiçoar.
mais uma vez muito obrigado pela atenção isso vai ajudar muito a minha esposa a controlar as vendas!!!
Abraço!
Alex
Re: List Box entre Datas
Teria a possibilidade, de uma Label somar as datas diferentes na primeira coluna do listbox1, no caso da planilha acima, quando eu fizer o filtro, vai aparecer vários registros dentro do período colocado nos Textbox1 e Textbox 2. (isso ficou perfeito)
Agora para eu saber quantos dias eu trabalhei eu teria que somar as datas, no caso vão existir vários registros iguais com a mesma data, e eu gostaria que a label mostrasse a quantidade de dias diferente.
no caso de valores, eu consegui somar a colona correspondente a valores usando esse caso abaixo:
Sub Somar()
Dim lItem As Double
Dim Total As Double
For lItem = 0 To ListBox1.ListCount - 1
If IsNumeric(ListBox1.List(lItem, 6)) = True Then
Total = Total + CCur(ListBox1.List(lItem, 6))
Label6.Caption = Format(CCur(Total), "currency")
End If
Next
End Sub
Agora com as datas eu não consegui o mesmo sucesso
Agora para eu saber quantos dias eu trabalhei eu teria que somar as datas, no caso vão existir vários registros iguais com a mesma data, e eu gostaria que a label mostrasse a quantidade de dias diferente.
no caso de valores, eu consegui somar a colona correspondente a valores usando esse caso abaixo:
Sub Somar()
Dim lItem As Double
Dim Total As Double
For lItem = 0 To ListBox1.ListCount - 1
If IsNumeric(ListBox1.List(lItem, 6)) = True Then
Total = Total + CCur(ListBox1.List(lItem, 6))
Label6.Caption = Format(CCur(Total), "currency")
End If
Next
End Sub
Agora com as datas eu não consegui o mesmo sucesso
- Reinaldo
- Jedi
- Mensagens: 1537
- Registrado em: Sex Ago 01, 2014 4:09 pm
- Localização: Garça - SP / SCS - SP
Re: List Box entre Datas
Não entendi, "..saber quantos dias eu trabalhei eu teria que somar as datas.." O que entende por somar datas?
Re: List Box entre Datas
Boa noite amigo Reinaldo, de acordo com o listbox, a primeira coluna são as datas certo?
vou utilizar esse modelo e fazer que o listbox seja meu relatório de vendas, toda vez que eu vender vai lancar uma linha certo? então, na primeira coluna da planilha vai haver várias datas iguais, no caso de hoje, se eu lançar 5 vendas vai ter 5 linhas com produtos diferentes, todas lançadas no dia 16/09/2019......e assim por diante
vai existir varias linhas com datas dos mesmo dias, mais oq me interessa são os dias diferentes, no caso, dia 16,17,18/19/20, etc...
a label só vai contar na primeira coluna as datas que forem diferentes no caso dos números que eu coloquei acima o resultado seria 5....pq são 5 dias diferentes, ai eu vou saber que foram trabalhados 5 dias...espero ter conseguido explicar melhor
vou utilizar esse modelo e fazer que o listbox seja meu relatório de vendas, toda vez que eu vender vai lancar uma linha certo? então, na primeira coluna da planilha vai haver várias datas iguais, no caso de hoje, se eu lançar 5 vendas vai ter 5 linhas com produtos diferentes, todas lançadas no dia 16/09/2019......e assim por diante
vai existir varias linhas com datas dos mesmo dias, mais oq me interessa são os dias diferentes, no caso, dia 16,17,18/19/20, etc...
a label só vai contar na primeira coluna as datas que forem diferentes no caso dos números que eu coloquei acima o resultado seria 5....pq são 5 dias diferentes, ai eu vou saber que foram trabalhados 5 dias...espero ter conseguido explicar melhor