Tenho um splitform no MS Access, onde inseri vários botões de comando.
Da esquerda para a direita nomeados:
- (A) cmdClearAllFilter
- (B) cmdFilterBySelection
- (C) cmdFiltroPorFormulário
- (D) cmdToggleFilter
Quero que os botões executem exatamente as mesmas operações que os botões na faixa de opções.
Consegui que (A) e (C) funcionassem com o seguinte VB:
Private Sub cmdClearAllFilter_Click()
DoCmd.RunCommand acCmdRemoveFilterSort
End Sub
Private Sub cmdFilterByForm_Click()
DoCmd.RunCommand acCmdFilterByForm
End Sub
No entanto, ainda tenho problemas com (B) e (D). Quero que eles se comportem como um clique nos botões da faixa de opções marcados abaixo (de preferência, DoCmd.RunCommand
caso contrário, com VB personalizado):
Para (B) eu tentei:
Private Sub cmdFilterBySelection_Click()
DoCmd.RunCommand acCmdFilterBySelection
End Sub
Não consigo descrever o comportamento, pois não entendo completamente o que ele faz. Só posso concluir que ele não se comporta como o botão da faixa de opções (menu suspenso que oferece 4 opções de filtro na célula/campo/propriedade/valor marcado).
Para (D) eu tentei:
Private Sub cmdToggleFilter_Click()
DoCmd.RunCommand acCmdToggleFilter
End Sub
Há dois problemas com isso:
- O botão não pode ser clicado antes que o botão Filtro de alternância real da faixa de opções seja clicado uma vez.
- Se o botão da faixa de opções não estiver disponível (esmaecido), um clique no botão de comando causará um erro, que presumo que possa ser resolvido por:
On Error Resume Next
.
Qualquer ajuda ou orientação é bem-vinda.
Com FilterBySelection, clicar no botão tira o foco do controle de dados e o Access não sabe qual parâmetro usar. É necessário retornar o foco para o último controle que estava em foco antes do clique no botão. Experimente:
Se você quiser acionar o menu suspenso para selecionar:
Para alternar o filtro, usei:
Me.FilterOn = Not Me.FilterOn
No entanto, não vejo uma maneira de utilizar FilterByForm sem clicar em Alternar na faixa de opções ou no menu do botão direito > Aplicar filtro/classificar.