Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Filtrar Valores >= no Formulário de Pesquisas (Resolvido)

Esclarecimentos e dúvidas sob o Modelo de Aplicativo de Cadastro em VBA no Microsoft Excel publicado no site e blog http://www.tomasvasquez.com.br
Avatar do usuário
Valderei
Colaborador
Colaborador
Mensagens: 47
Registrado em: Qui Dez 27, 2012 9:57 pm
Localização: Caxias do Sul - RS

Filtrar Valores >= no Formulário de Pesquisas (Resolvido)

Mensagem por Valderei »

Pessoal, boa noite.
Uso já a bastante tempo o modelo disponibilizado pelo Tomas aqui no site, nele tenho feito vários acréscimos e aprendido muito.
O que pretendo fazer agora, é conseguir filtrar nele um intervalo de valores, a versão que tenho, possui uma condição de pesquisa entre intervalo de datas, mas vi que para números, as mesmas variáveis não podem ser usadas.
Gostaria de saber se alguém já fez isso ou tem ideia de como implementar.
Vou deixar como anexo uma imagem do que pretendo, onde a intenção é filtrar as quantidades.

Obrigado e agradeço desde já a ajuda que for receber.
Anexos
Pesquisa.jpg
Pesquisa.jpg (164.74 KiB) Exibido 18837 vezes
Editado pela última vez por Valderei em Sex Jun 21, 2019 11:26 am, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Filtrar Valores >= no Formulário de Pesquisas

Mensagem por Reinaldo »

...as mesmas variáveis não podem ser usadas.
Até podem ser utilizadas, mas dependendo da combinação de filtro, a qual não entendi, pela foto exposta; e aconselhável utilizar uma (ou mais) variavel especifica.


Avatar do usuário
PRMPOKER
Consultor
Consultor
Mensagens: 206
Registrado em: Ter Dez 04, 2012 8:57 am

Re: Filtrar Valores >= no Formulário de Pesquisas

Mensagem por PRMPOKER »

Prezados, bom dia!

Caro Valderei, tudo certo?

Pois veja bem, quantas coincidências:
Somos ambos de Caxias do Sul/RS (salve, salve, Galeteria Alvorada!);
Você se registrou neste fórum em 27/12, dia do meu aniversário;
Desenvolvi um sistema em VBA/Excel para controle de auditorias de qualidade, para ser utilizado na produção Suspensys, em 2011;

Pouca coisa?

Meu caro, me chama nos meus contatos pessoais que te ajudo!

Um abraço!


Avatar do usuário
Valderei
Colaborador
Colaborador
Mensagens: 47
Registrado em: Qui Dez 27, 2012 9:57 pm
Localização: Caxias do Sul - RS

Re: Filtrar Valores >= no Formulário de Pesquisas

Mensagem por Valderei »

Reinaldo escreveu: Sex Jun 14, 2019 10:28 am
...as mesmas variáveis não podem ser usadas.
Até podem ser utilizadas, mas dependendo da combinação de filtro, a qual não entendi, pela foto exposta; e aconselhável utilizar uma (ou mais) variavel especifica.
Reinaldo, tudo bem.
A ideia do filtro, é na coluna QuantidadeNC, eu quero filtrar valores acima >= (maior ou igual) a 10, e minha intenção inicial foi de usar o mesmo padrão criado para filtrar entre datas, porém, a limitação foi a barreira, até tentei várias vezes, mas nada rolou.
Se achares mais conveniente, posso colocar um exemplo.

Obrigado.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Filtrar Valores >= no Formulário de Pesquisas

Mensagem por Reinaldo »

E conveniente anexar um exemplo de como está seu modelo e de como deseja obter o retorno. Informando tambem as variações e/ou combinações (se houver) de filtro


Avatar do usuário
PRMPOKER
Consultor
Consultor
Mensagens: 206
Registrado em: Ter Dez 04, 2012 8:57 am

Re: Filtrar Valores >= no Formulário de Pesquisas

Mensagem por PRMPOKER »

Prezados, bom dia.
Caro Valderei, tudo certo?

Bem importante e pertinente o comentário do colega Reinaldo, que aliás, é um mestre em conhecimento e disponibilidade. Parabéns Reinaldo. Sem um modelo ou exemplo, raramento poderemos ajudar.

No caso em específico, o Valderei mando sua planilha diretamente para meu contato, então, segue a solução:

O modelo é baseado no Formulário de Cadastro do Tomás, então, seguindo a mesma lógica, só foi necessário testar se o campo (listbox) que contém os operadores lógicos está ou não preenchido e caso esteja, adicionar a parte do WHERE correspondente. Caso não haja operador selecionado, segue o fluxo anterior.

Código: Selecionar todos


'Instrução para montaClausulaWhere entre as DATAS
Private Sub MontaClausulaWhere(ByVal NomeControle As String, ByVal NomeCampo As String, ByRef sqlWhere As String)

    If Trim(Me.Controls(NomeControle).Text) <> vbNullString Then
        If sqlWhere <> vbNullString Then
            sqlWhere = sqlWhere & " AND"
        End If

        If IsDate(Me.Controls(NomeControle).Text) Then    'Verifica se é Data
            Select Case LocEntreDatas

            Case 0    'Procura por uma unica Data
                sqlWhere = sqlWhere & " (" & NomeCampo & ") = #" & Format(txtDataini, "mm/dd/yyyy") & "#"
            Case 1    'Procura entre duas Datas
                sqlWhere = sqlWhere & " (" & NomeCampo & ") BETWEEN #" & Format(txtDataini, "mm/dd/yyyy") & "# AND #" & Format(txtDatafim, "mm/dd/yyyy") & "#"
            End Select
        Else
            '*** Verifica se há um operador de comparação de valores e então, aplica filtro para montar a cláusula where conforme o operador selecionado no formulário.
            If NomeControle = "TextBoxValor" Then
                sqlWhere = sqlWhere & " " & NomeCampo & " " & ComboBoxOperador.Text & " " & TextBoxValor.Text
            '***  Caso não tenha nenhum operador de comparação selecionado, executa conforme era antes.
            Else
                sqlWhere = sqlWhere & " UCASE(" & NomeCampo & ") LIKE UCASE('%" & Trim(Me.Controls(NomeControle).Text) & "%')"
            End If
            '*** Caso deseje retornar ao original, exclua as linhas 1, 2, 3, e 5 acima. Fim da Alteração
        End If
    End If

End Sub
'FIM DATAS

Um abraço!


Avatar do usuário
Valderei
Colaborador
Colaborador
Mensagens: 47
Registrado em: Qui Dez 27, 2012 9:57 pm
Localização: Caxias do Sul - RS

Re: Filtrar Valores >= no Formulário de Pesquisas

Mensagem por Valderei »

PRMPOKER escreveu: Ter Jun 18, 2019 10:46 am Prezados, bom dia.
Caro Valderei, tudo certo?

Bem importante e pertinente o comentário do colega Reinaldo, que aliás, é um mestre em conhecimento e disponibilidade. Parabéns Reinaldo. Sem um modelo ou exemplo, raramento poderemos ajudar.

No caso em específico, o Valderei mando sua planilha diretamente para meu contato, então, segue a solução:

O modelo é baseado no Formulário de Cadastro do Tomás, então, seguindo a mesma lógica, só foi necessário testar se o campo (listbox) que contém os operadores lógicos está ou não preenchido e caso esteja, adicionar a parte do WHERE correspondente. Caso não haja operador selecionado, segue o fluxo anterior.

Código: Selecionar todos


'Instrução para montaClausulaWhere entre as DATAS
Private Sub MontaClausulaWhere(ByVal NomeControle As String, ByVal NomeCampo As String, ByRef sqlWhere As String)

    If Trim(Me.Controls(NomeControle).Text) <> vbNullString Then
        If sqlWhere <> vbNullString Then
            sqlWhere = sqlWhere & " AND"
        End If

        If IsDate(Me.Controls(NomeControle).Text) Then    'Verifica se é Data
            Select Case LocEntreDatas

            Case 0    'Procura por uma unica Data
                sqlWhere = sqlWhere & " (" & NomeCampo & ") = #" & Format(txtDataini, "mm/dd/yyyy") & "#"
            Case 1    'Procura entre duas Datas
                sqlWhere = sqlWhere & " (" & NomeCampo & ") BETWEEN #" & Format(txtDataini, "mm/dd/yyyy") & "# AND #" & Format(txtDatafim, "mm/dd/yyyy") & "#"
            End Select
        Else
            '*** Verifica se há um operador de comparação de valores e então, aplica filtro para montar a cláusula where conforme o operador selecionado no formulário.
            If NomeControle = "TextBoxValor" Then
                sqlWhere = sqlWhere & " " & NomeCampo & " " & ComboBoxOperador.Text & " " & TextBoxValor.Text
            '***  Caso não tenha nenhum operador de comparação selecionado, executa conforme era antes.
            Else
                sqlWhere = sqlWhere & " UCASE(" & NomeCampo & ") LIKE UCASE('%" & Trim(Me.Controls(NomeControle).Text) & "%')"
            End If
            '*** Caso deseje retornar ao original, exclua as linhas 1, 2, 3, e 5 acima. Fim da Alteração
        End If
    End If

End Sub
'FIM DATAS

Um abraço!
Prezado Reinaldo, realmente a adição de um exemplo auxilia e muito na solução do problema ou dúvida do usuário, peço desculpas por não ter procedido deste modo desde o início, próximas vezes farei isso.
Obrigado.

Bem, graças ao grande apoio do PRMPOKER, conseguimos resolver a questão. A ideia inicial era realmente usar a base do projeto do Tomas, mas faltava a lógica do entendimento, a qual foi encontrada pelo PRMPOKER.
Ele já compartilhou o código utilizado em meu projeto, ou seja, outros que usam este mesmo modelo, já podem utilizar.

Vou dar como concluído o tópico.


Obrigado a todos do fórum e em especial ao PRMPOKER.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder