Excel Hints

Results 1 to 6 of 6

Thread: Database Design for Multiple Filters

  1. #1

    Database Design for Multiple Filters

    Hi Guys, Me Again.
    First of All, thanks in advance for any help.

    Im doing a userform with 6 comboboxes.
    These box are populated in a auxiliar spreadsheet.
    When user Select a option in Combobox1, i use Change event to call a method passing a query (string) as parameter. That method applies the filter in database, and call other method to recalculate all values in spreadsheet.

    At this point, everything's is fine. When user select first filter in combo 1, i apply. When select filter in combo2, apply using the previous filtered data (used in combo1)... and go...

    My problem is, all combo boxes have an option to disable the specific filter (Disable the filter for specific combobox), so im thinking how ill do that... i have no ideia, anyone knows the best way? Im thinking about store all filters and pass all filters in every method call, following this idea i dont know if it solve my problem. Any suggestions? Ideas?

    Again, thanks in advance.
    Sorry about my English (i dont speak english)

  2. #2
    VBAX Tutor Benzadeus's Avatar
    Joined
    Dec 2008
    Location
    Belo Horizonte, Brazil
    Posts
    267
    Location
    Olá,

    Seria melhor você utilizar filtro avançado ao invés de, simplesmente, um filtro.
    Você sabe usar filtro avançado? O Excel tem uma ajuda boa de como usá-la.

    ---

    Instead of using filter method, you should use advanced filter.
    -
    Regards,

    Felipe Costa Gualberto
    http://www.ambienteoffice.com.br

  3. #3
    Benzadeus, Obrigado pela resposta.
    O jeito que dei foi aplicar o filtro sempre mesmo, tenho 6 combo boxes, armazeno a query de cada uma num vetor de 6 posições, quando executa o evento change eu chamo a função que calcula e verifico em cada posição do vetor se a string não é nula (se existe query, ou seja, existe filtro) se não for nula eu filtro, se não passo para a próxima. Funcionou bem, fica a dica....

    Obrigado novamente pela resposta.

  4. #4
    VBAX Tutor Benzadeus's Avatar
    Joined
    Dec 2008
    Location
    Belo Horizonte, Brazil
    Posts
    267
    Location
    OK. Vale a pena eu compartilhar a dica:
    Normalmente, o caminho da evolução de programação dos desenvolvedores de sistemas VBA em Excel segue o caminho Filtro - Filtro Avançado - SQL. Você poderia começar a experimentar usar o SQL, que tal?
    É necessário criar uma cadeia de conexão com o servidor (explicado no link a seguir), o cabeçalho da tabela deve-se iniciar na célula A1, e a instrução SQL pode ser do tipo:
    SELECT nome, endereço, idade
    FROM banco
    WHERE nome='Feli%' AND idade=22
    (strings ficam entre aspas simples e números foram de aspas simples. caracteres coringas é o símbolo %)
    http://www.ambienteoffice.com.br/exc...a_conexao_ado/
    -
    Regards,

    Felipe Costa Gualberto
    http://www.ambienteoffice.com.br

  5. #5
    Obrigado pela resposta amigo, então na verdade foi assim mesmo que eu fiz.. tipo, eu tenho uma planilha com 26 colunas, sendo que uma delas é uma data (ano e mes no formato YYYYMM). Eu aplico um autofiltro nessa coluna para pegar cada data especifica, copio essa planilha filtrada para outra, e aplico as query's (usando SQL) nessa planilha. O meu problema era a questão de interação entre os filtros, quando haviam multiplas seleções, o jeito que dei foi reaplicar as query's sempre.

    Obrigado pelo link, não tinha achado nada parecido na internet dessa qualidade ainda, se tiver mais coisas interessantes, poste!

    Aproveitando o interesse mútuo, existe alguma maneira de atualizar o "Text" de um Combobox sem disparar o evento Change?

    Grato.

  6. #6
    VBAX Tutor Benzadeus's Avatar
    Joined
    Dec 2008
    Location
    Belo Horizonte, Brazil
    Posts
    267
    Location
    Obrigado pelo link. Você pode assinar o RSS do site para obter novidades.

    Em relação ao ComboBox, não é possível fazer o que deseja diretamente, no entanto, há um traquejo simples. Use um código como:

    [VBA]Dim blEventos As Boolean

    Private Sub ComboBox1_Change()
    If Not blEventos Then Exit Sub

    MsgBox ComboBox1

    End Sub

    Private Sub ComboBox2_Change()
    If Not blEventos Then Exit Sub

    MsgBox ComboBox2

    End Sub

    Private Sub CommandButton1_Click()
    'Alternar entre habilitar/desabilitar eventos

    blEventos = Not blEventos

    End Sub

    Private Sub UserForm_Initialize()
    blEventos = True

    ComboBox1.AddItem "Felipe"
    ComboBox1.AddItem "Costa"
    ComboBox1.AddItem "Gualberto"
    ComboBox2.AddItem "Felipe"
    ComboBox2.AddItem "Costa"
    ComboBox2.AddItem "Gualberto"

    End Sub[/VBA]

    Ppara usar o código, crie um formulário com um botão e dois Combobox. O botão alterna entre os modos de habilitar/desabilitar eventos.
    -
    Regards,

    Felipe Costa Gualberto
    http://www.ambienteoffice.com.br

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •