Aprenda sobre filtragens
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Apresento um breve resumo das formas mais empregadas de filtragens, com o objetivo de atender aos anseios dos menos experientes, na programação com o Access. Para reforçar o assunto aqui abordado, ofereço uma vídeo-aula, com dicas importantes sobre a construção de consultas pelo VBA e disponibilizo o aplicativo Maestro, que traz inúmeros exemplos práticos sobre filtragens.
Consultas Seleção.
As consultas seleção são empregadas no carregamento dos objetos: formulários, relatórios, listbox e combobox. A flexibilidade em alteramos a estrutura de uma consulta pelo VBA, em tempo de execução, nos permite elaborar soluções, sem igual, para estes objetos.
É essencial que você aprenda, o quanto antes, a sintaxe de consulta. Eu lhe garanto que é muito simples! Estarei lhe dando uma ajudinha através da vídeo-aula.
A sintaxe mais simples possível para uma consulta seleção é essa:
SELECT [Lista dos Campos] FROM [Nome da Tabela];
"SELECT * FROM tblClientes;"
O asterisco (*) representa todos os campos da tabela. Bom, esta consulta não nos traz benefício algum em termos de filtragem, pois o resultado seria o mesmo que acionar diretamente à tabela de clientes. Vamos supor que essa tabela de clientes tenha uns 20 campos, mas estamos precisando apenas de três destes campos para alimentar uma combobox. Assim, montamos a consulta, somente com os campos que desejamos exibir:
"SELECT idCliente, NomeCliente, Estado FROM tblClientes;"
Temos então, a nossa primeira forma de filtragem que é a seleção de campos desejados.
A cláusula WHERE
As consultas possuem a cláusula WHERE, que nos permite utilizar critérios de filtragem para exibir registros específicos. Exemplo: Quero que a consulta exiba apenas os clientes do estado de São Paulo.
SELECT [Lista dos Campos] FROM [Nome da Tabela] WHERE [critério de filtragem];
"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado='São Paulo';"
Observe que coloquei 'São Paulo' entre os apóstrofes. É uma regra da consulta, a colocação dos apóstrofes ou aspas duplas, para valores do tipo string. Para valores do tipo número, não se põe os apóstrofes. Exemplo:
"SELECT idCliente, NomeCliente FROM tblClientes WHERE idCliente=2;"
Para valores do tipo data temos que usar o cerquilha/tralha (#) . Veja o exemplo de uma consulta exibindo todos os pedidos que possuem a data de entrega maior ou igual a dois de março de dois mil e onze:
"SELECT idPedido, fornecedor FROM tblPedidos WHERE DataEntrega >= #03/02/2011#;"
Outra questão importantíssima a saber no uso de data é o formato. O código VBA interpreta o formato Americano (mês/dia/ano). Então, observe que o código acima está lendo dois de março e não três de fevereiro.
Vamos supor que você esteja utilizando o campo de um formulário, de nome txData, como critério de filtragem para a data na consulta:
"SELECT idPedido, fornecedor FROM tblPedidos WHERE DataEntrega >=#" & me!txData & "#;"
A data no formulário é digitada no formato (dia/mês/ano), porém é preciso entregá-la ao código no formato Americano (mês/dia/ano), para que o VBA leia de forma correta. Vamos supor então que tenhamos digitado na caixa de texto do formulário, a data 03/02/2011 (três de fevereiro).
"SELECT * FROM tblPedidos WHERE DataEntrega >=#" & Format(me!txData,"mm/dd/yyyy") & "#;"
A função Format() pega a data do campo do formulário e a entrega para o VBA no formato Americano. O resultado final da consulta é como vemos abaixo:
"SELECT * FROM tblPedidos WHERE DataEntrega >= #02/03/2011#;"
O VBA irá ler três de fevereiro de dois mil e onze, como nós desejamos.
Operador Between...And
Uma outra forma muito empregada é a filtragem por período (data inicial e data final). Para isso usamos o operador BETWEEN...AND. Exemplo:
filtro = "Between #" & me!txDataInicial & "# AND #" & me!txDataFinal"
"SELECT * FROM tblPedidos WHERE DataEntrega " & filtro & "#;"
Como se encontra a escrita acima, você já sabe que teremos resultados errados de filtragem, não? Claro que sabe, pois falta transformamos as datas digitadas nos campos do formulário para o formato Americano. O correto então é:
filtro="Format(me!txDataInicial,"mm/dd/yyyy") & "# AND #" & Format(me!txDataFinal,"mm/dd/yyyy")"
"SELECT * FROM tblPedidos WHERE DataEntrega Between #" & filtro & "#;"
Concatenação
Alguns de vocês devem estar se perguntando o que significa o símbolo & na estrutura da consulta. Significa concatenação (unir). Usamos este símbolo quando estamos juntando uma sintaxe escrita do VBA com um valor originário de um campo de formulário ou originário de uma variável.
Sintaxe final da consulta = [sintaxe parcial] & [variável ou campo do formulário] & [sintaxe parcial]
Estas junções costumam dar "dores de cabeça" para os programadores mais novos, pois qualquer "bobeada" provoca uma "má" formação da sintaxe, acarretando numa mensagem de erro no momento da sua execução. Com a vídeo-aula você aprenderá como solucionar estes erros, rapidamente.
Uso do operador LIKE
O LIKE é o operador mais apropriado para comparar valores do tipo texto, permitindo não só especificar cadeias de texto idênticas, mas também semelhantes, pois existem alguns caracteres especiais que funcionam como "curingas".
Exemplos:
"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado Like 'São Paulo';"
A consulta acima retorna somente os registros dos clientes residentes no estado de São Paulo.
"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado Like 'pa*';"
Já nesta outra consulta, observamos a inclusão do caractere asterisco (*) que permite traduzir a declaração nos seguintes termos: Retorna todos os clientes residentes nos estados, começando com "pa", não importando o que venha depois de "pa" (Pará, Paraíba e Paraná).
"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado Like '* do *';"
A consulta acima, retorna somente os registros dos clientes residentes nos estados que possuam " DO " no nome ( Rio Grande DO Norte, Rio Grande DO Sul e Mato Grosso DO Sul ).
O uso do LIKE é muito empregado na prática, principalmente em consultas dinâmicas. Aquelas em que, à medida que se vai digitando, vai se obtendo o resultado.
Não deixe de observar o uso dos apóstrofes ( ' ), já que estamos tratando de valores do tipo string.
Usando o Operador IN
Determina se o valor de uma expressão é igual a algum dos vários valores de uma lista especificada. Exemplo:
filtro = "IN('São Paulo', 'Paraná', 'Rio de janeiro')"
"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado " & filtro & ";"
Retorna somente os registros dos clientes residentes nos estados de São Paulo, Paraná e Rio de janeiro.
As propriedades RowSource e RecordSource
A propriedade RowSource nos permite alimentar as combobox e as listbox com as consultas.
Exemplo de uma consulta, via código, alimentando uma combobox, pelo evento "Ao receber foco":
Private Sub cboClientes_GotFocus() Dim strSql As String strSql = "SELECT idCliente, NomeCliente FROM tblClientes WHERE Estado='São Paulo';" Me!cboClientes.RowSource = strSql End Sub
Para alimentar os formulários e relatórios é usada a propriedade RecordSource.
Exemplo de uma consulta, alimentando um relatório, pelo evento "Ao abrir" do relatório:
Private Sub Report_Open(Cancel As Integer) Dim strSql As String strSql = "SELECT * FROM tblClientes WHERE Estado='São Paulo';" Me.RecordSource = strSql
End Sub
Uso das propriedades Filter e FilterOn dos objetos formulário e relatório.
Vamos imaginar um relatório de cadastro de clientes, que tem como origem dos dados, a tabela tblClientes. Se abrirmos pura é simplesmente o relatório, todos os registros serão carregados, pois não há qualquer tipo de filtragem. Porém, podemos aplicar a propriedade filter ao abrir o relatório, para obtermos os registros específicos desejados. No exemplo abaixo, o relatório irá exibir somente clientes de São Paulo.
Private Sub Report_Open(Cancel As Integer) Me.filter = "Estado='São Paulo';" Me.filterOn = true
End Sub
A propriedade filter é uma expressão de seqüência de caracteres que consiste em uma cláusula WHERE sem a palavra-chave WHERE.
FilterOn = true aplica a filtragem e FilterOn=false retira a filtragem.
A propriedade filter é amplamente utilizada nos casos aonde necessitamos filtrar subformulários, baseada em um campo do formulário principal.
Veja no exemplo abaixo, um código que filtra um subformulário(sfrmClientes) à medida que se digita em uma caixa de texto (txCliente) do formulário principal:
Private Sub txCliente_Change() Dim filtro As String If Len(Me!txCliente.Text & "") = 0 Then
'Se não há nada digitado, remove o filtro Me!sfrmClientes.Form.Filter = "" Me!sfrmClientes.Form.FilterOn = False Exit Sub End If filtro = "[NomeDoCliente] like '*" & Me!txCliente.Text & "*'" Me!sfrmClientes.Form.Filter = filtro Me!sfrmClientes.Form.FilterOn = True End Sub
Cláusula WHERE do comando de ação DoCmd.ApplyFilter
Este comando de filtragem é aplicado em formulários e em relatórios que possuem o foco. Por exemplo, no cadastro de clientes, do aplicativo Maestro, tem uma combobox aonde se seleciona o cliente de interesse para a exibição do seu respectivo cadastro. Veja na figura abaixo:
Ao selecionar o cliente, o evento "Após atualizar" da combobox é disparado e a filtragem do registro é feita, aplicando-se o comando DoCmd.ApplyFilter. É usado no critério de filtragem do comando, o número exclusivo do cliente selecionado, que se encontra na primeira coluna (oculta) da combobox.
Private Sub cboConsulta_AfterUpdate() DoCmd.ApplyFilter , "idcliente = " & Me!cboConsulta.Column(0) Me!cli_Nome.SetFocus Me!cboConsulta = Null End Sub
Note que há um botão ao lado da combobox que é para a remoção do filtro, se for preciso.
Private Sub btRemoverFiltro_Click() DoCmd.RunCommand acCmdRemoveFilterSort '-----------------------
'Ou DoCmd.ShowAllRecords
'----------------------- Me!cboConsulta.SetFocus End Sub
Cláusula WHERE dos comandos de ação DoCmd.Openform e DoCmd.OpenReport.
Ao solicitarmos a abertura de um formulário ou de um relatório, podemos, simultaneamente, definir uma filtragem a ser aplicada e isso é amplamente utilizado. Eu abuso desta opção.
Imagine uma caixa de listagem, com uma lista de pedidos. Desejamos que, ao se dar um duplo clique em um dos pedidos da lista, se abra o formulário de pedidos, no registro correspondente.
Private Sub Lista_DblClick(Cancel As Integer) Docmd.OpenForm "frmPedidos",,,"NumeroPedido = " & Me!Lista.column(1) End Sub
Outra situação muito comum é querer imprimir ou visualizar um relatório, correspondente ao cadastro que se está alterando naquele momento.
Private Sub btImprimir_Click()
'Salva as alterações do cadastro para se refletir no relatório
Docmd.RunCommand acCmdSaveRecord
'Abre o relatório, filtrado pelo número exclusivo do cliente
DoCmd.OpenReport "rltCadastroCliente",acViewPreview,,"idCliente = " & me!idCliente
DoCmd.Maximize
End Sub
Critérios de filtragem das funções DLookup(), Dsum(), Dcount() e outras
Saber aplicar filtros nestas funções é fundamental , porém nada difere do que você viu até agora.
Vamos supor que seja preciso capturar o Preço de Custo de um PenDrive , código pd8gb, que se encontra na tabela de estoque. Podemos capturar valores com a função Dlookup()
PreçoVenda = Dlookup("PreçoCusto","tblEstoque","Código = 'pd8gb'") * 1.35
Um uso prático para a função DCount() é de investigar se há registro(s) presente(s) em uma determinada tabela. O exemplo abaixo investiga se o cliente que está sendo cadastrado, já se encontra registrado na tabela. A lógica é : se a função Dcount() contar 1 ou maior que 1 , o registro existe.
Private Sub NomeCliente_BeforeUpdate(Cancel As Integer)
If DCount("IdCliente","tblClientes","NomeCliente = '" & me!NomeCliente & "'") > 0 then
MsgBox "O Cliente " & Me!NomeCliente & " já existe..."
Me.Undo
Cancel = True
End If
End Sub
Imagine que você agora precise somar as despesas de Luz pagas de um Contas a Pagar, no ano de 2011. A função Dsum() resolve a questão de forma bem simples.
ValorLuz = Dsum("ValConta","tblContasPagas","TipoConta='Luz' And Year(DataPagamento)=2011")
A questão central é você saber aplicar corretamente o critério de filtragem.
Para ampliar o seu conhecimento
O Access possui uma centena de funções prontas, que solucionam a maioria de casos do cotidiano e você não pode deixar de, pelo menos, saber que existem.
O conhecimento destas funções irá ampliar significativamente o seu potencial para montagem desses critérios de filtragem.
Algumas destas funções que foram utilizadas aqui no artigo :
Format()
Year()
Dlookup()
Dcount()
Dsum()
Aprenda aonde conhecer todas estas funções no Access aqui.
Arquivo exemplo
Ofereço o aplicativo Maestro que possui uma série de exemplos, empregando as técnicas de filtragem, aqui apresentadas.
Para entrar na estrutura do Maestro (Maestro_vx.accdb), basta manter pressionada a tecla SHIFT na inicialização.
Senha do usuário admin > admin
Senha do usuário Avelino > 1234
Senha do Maestro_vx_be.accdb (tabelas) > a1234
O que irá aprender com o vídeo
Como utilizar o MODO SQL para analisar as consultas criadas no ambiente gráfico.
Identificar os erros mais comuns, cometidos na construção do critério de filtragens das consultas.
Como construir uma Combobox para filtragens, usada em um formulário de cadastro.
Como utilizar o PONTO DE INTERRUPÇÃO no VBA, para detectar erros nos códigos.
Faça o login aqui para ter acesso ao vídeo.
Sucesso!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Adquira o kit UsandoAccess e aprenda em alta velocidade
289 comentários Darlan Sandro 10/12/2022 13:40:41 Olá Professor, Estou criando um DCount que possui a função de verificar na tabela se determinado registro já foi cadastrado. O registro mencionado é do tipo data ou date. Na tabela do banco utilizei uma mascara 00/0000, mês e ano, respectivamente. Preciso inserir no momento em que o usuário realiza o login no sistema uma mensagem que identifique se ele já cadastrou os dados no sistema para uma tabela especifica. De forma simples toda vez que o mês e o ano mudar de status o aplicativo verificará se o usuário realizou o cadastro, caso a condição tenha sido negativa, o formulário de cadastro será aberto e ele procederá o cadastro. Abaixo estou postando o código. Private Sub btnTestando_Click() filtro = Format(Me!txtPeriodo, "mm/yyyy") If DCount("*", "tblNotaFiscalDados", "periodo = '" & filtro & "'") > 0 Then MsgBox "O Cliente " & Me!txtPeriodo & " já existe..." Me.Undo Cancel = True End If End Sub Entranto todas as vezes que executo, o access apresenta o erro "Erro em Tempo de Execução 3464". Desde já agradeço qualquer ajuda. wilson 16/11/2022 15:19:23 Preciso filtrar dados como consulta Messias Gomes 02/11/2022 09:17:30 Preciso filtrar dados de uma consulta ordem de venda para um formulário, nesse formulário que faz parte de uma tabela irei informar alguns dados, após pressionar o botão gravar os dados filtrado de uma consulta (+) mais os dados que eu crescente (digitei) será gravado em uma tabela, por favor, poderia me ajudar Fabricia Lima 01/11/2022 01:13:21 Tive o seguinte problema ao usar o código abaixo em uma combobox: TxtDP.RowSource = "SELECT Turma, ID, Nome FROM FiltroFunc WHERE Turma Like '*" & Me.TxtGrupo.Column(0) & "*' Order By Turma;" Ele realmente filtra de acordo com meu criterio, mas não permite que eu selecione além do primeiro item da lista. Você pode me ajudar? Giuseppe Carozzo 21/10/2022 18:12:29 Muito Obrigado! suas dicas são demais! Odete Nogueira 02/09/2022 07:11:13 Segui as indicações para filtrar os sinistros por concluir, ou seja dataconc=sem preencher: Private Sub Form_Open(Cancel As Integer) Dim strsql As Integer strsql = "select ID1, data, local, viatura, matricula, motorista, orçamento from tblsinistros where dataconc =' ';" Me.RecordSource = strsql End Sub Abre o formulário mas aparece o erro Run-time error '13' Alguma dica do que estou a fazer errado Avelino Sampaio 08/08/2022 06:28:04 Tino, para imprimir um arquivo via Access, podemos utilizar a API ShellExecute. #If VBA7 Then Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As LongPtr, ByVal lpOperation As String, _ ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr #Else Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, _ ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long #End If Public Sub fncImprimirDoc(strLocal$) Call ShellExecute(0, "print", strLocal, vbNullString, vbNullString, 0&) End Sub Basta chamar a função indicando o local e o nome do arquivo. Exemplo: call fncImprimirDoc("c:\SuaPasta\SeuArquivo.txt") Passe a tirar suas dúvidas pelo nosso fórum: http://www.redeaccess.com.br Aguardamos Tino 06/08/2022 17:22:47 Olá avelino Como abrir um arquivo texto.txt e imprimir com o access VBA? Agradeço. Avelino Sampaio 30/07/2022 06:33:10 Fabiano, abra um tópico no nosso fórum sobre esta sua dúvida, oferecendo mais detalhes. http://www.redeaccess.com.br Aguardamos Fabiano Alves 29/07/2022 14:42:28 Oi, Como faço para selecionar os registros que possuem o caractere "Enter" numa determinada coluna? Abs, Fabiano Alves marcos 07/07/2022 19:49:24 se tiver alguem que desenvolve programa em access pagando favor me enviar email. marcos.moureira@yahoo.com.br Carlos Bezerra 01/07/2022 04:04:58 Muito bom o tutorial ! Aprendi bastante. Obrigado Avelino Sampaio 24/05/2022 10:54:57 Carlos, se inscreva no nosso fórum e tópico que for abrir anexe um BD exemplo. http://www.redeaccess.com.br Estarei te aguardo Carlos 24/05/2022 10:38:06 Bom dia avelino! Primeiro quero parabenizar pelo seu grande talento e muita dedicação por todos nós. Preciso de uma ajuda de todos vcs, tenho um formulário que eu filtro pela uma caixa de combinação e o mesmo me da o nome das pessoas que eu quero no formulário, por exemplo na caixa de combinação vai me aparecer os nomes das cidades " sao paulo; rio de janeiro; belo horizonte" e em cada cidade dessas tenho vários coordenadores e funcionários, quando eu selecionar por exemplo "são paulo" na caixa de combinação o mesmo vai me filtrar somente as pessoas que está locado em são paulo, porém na hora filtrar no fomulario, eu quero criar um botão que vai imprimir somente aquelas pessoas que foi filtrada pela cidade que eu selecionei na caixa de combinação. Ricardo 14/05/2022 12:44:49 Outra duvida, Tenho uma formulário principal e esse formulário está com todos campos inativos exceto os botões de navegação que criei e dois de pesquisa. quero saber se neste caso consigo inserir um botão no campo e-mail que abra a pagina de e-mails do MS Outlook para que eu envie um e-mail sem que eu precise habilitar os campos e se também é possível criar um formulário de e-mail padrão que se altere a cada e-mail selecionado? Ricardo 14/05/2022 12:38:13 Olá Galera, Como fazer uma consulta com vários parâmetros, neste caso quero criar a consulta no formulário, nela acrescentarei três combo que serão caixas de combinação que serão na sequencia abaixo, sendo que cada combo retornará os dados selecionado de cada combo tipo, a combo "Razão_Cliente" retornará os cliente relacionadas a combo Minha_Lista e a combo "Tipo_Abordagem" retornará as informações ligadas a combo "Razão_Cliente" mediante a isso quero criar um botão "executar consulta" que me retorne só o que escolhi nas combos abaixo. Combo 1 = Minha_Lista Combo 2 = Razão_Cliente Combo 3 = Tipo_Abordagem usei esse exemplo: Private Sub Minha_Lista_Change() Razão_Cli.Requery Razão_Cli.SetFocus Razão_Cli.Dropdown End Sub Private Sub Razão_Cli_Change() Tipo_Abordagem.Requery Tipo_Abordagem.SetFocus Tipo_Abordagem.Dropdown End Sub Como faço para ativar esse seleção? Rolling Eyes Avelino Sampaio 27/04/2022 16:57:53 Santos, vá em "opções" do Access > Designers de Objetos > Desmarque "Sintaxe compatível com o SQL Server (ANSI 92). Sucesso! SANTOS 27/04/2022 16:13:49 ALGUEM PODE ME AJUDAR: O operador Like no meu pc não está dando certo, quando eu dou um enter fica Alike Paulo Maia 13/04/2022 12:49:25 Mestre Avelino ; Com base no seu ex. ValorLuz = Dsum("ValConta","tblContasPagas","TipoConta='Luz' And Year(DataPagamento)=2011") Estou criando um relatório e dentro dele coloquei este campo ( txtSomaJaneiro ) , e no evento ao abrir do relatório estou tentando inserir esta SOMA, do campo ( ccCrédito ) da tabela ( tbl_FluxoCaixa ). Porem não estou conseguindo ajustar o critério -> pois preciso que ao abrir do relatório esse campo receba a Somatória de ccCrédito da tabela "( porem baseado no mês 01 do ano vigente )" , Com base no campo (cdData) da mesma tabela. Private Sub Report_Load() txtSomaJaneiro = DSum("ccCrédito", "tbl_FluxoCaixa", "And Year (cdData) = 01/yyyy") End Sub Ou seja se eu abrir o relatório esse ano ele soma o mês de janeiro referente a este ano. ... e ; Se eu abrir o mesmo relatório, só que no ano que vem ele vai somar janeiro do ano que vem, 2018. ........... Preciso colocar como Fonte de registro do relatório esta tabela ( tbl_FluxoCaixa ) ? Setar o db , Set dbs = CurrentDb ? Como montar ? Dentro do evento ao abrir do form . Valter Rodrigues 13/04/2022 06:56:40 Avelino, precisso da sua ajuda. tenho uma base da dados com tabelas com nomes diferentes mais com estrutura iguais. como criar uma consulta em formulario baseado no nome da tabela que o nome o nome da tabela e variavel. jair madeira 31/03/2022 13:21:48 Avelino, tentei várias vezes e não consegui. Sempre com a mensagem de erro 451. obrigado jair madeira 28/03/2022 19:14:00 Criar uma combo para quando eu seliecionar o codigo da Extensao, abro o relatorio relativo com os registros relativo aquela extensao. A combo esta em um tabela diferente dos dados dados que relatorio extrai extar as informacoes ou seja as informacoes do relatorio e traves de um consulta de um atabela diferte. ja tentei: Docmd.openreport"Relatrio", coloquei no formulario da combo tambem [Forms]![RelRegional]![cboExet]. mas nao da certo, fica pedindo para entrar com o codigo da Regional. sendo que o codigo da regional esta na combo. Poderia me ajudar agradeço ANDRE LUIZ 14/03/2022 15:48:00 Boa Tarde! Gostaria de uma luz, estou montando um sistema para controle de arquivo, trabalho com departamento pessoal, e todo mes tem que ter holerite do funcionario, gostaria de filtar para ver os meses de holerite ainda esta faltando (competencia), como devo proceder Jonatan 08/03/2022 16:19:16 Grande Avelino Ótimo artigo, mas estou com um problema de filtragem não abordado aqui. Estou tentando executar, sem êxito, o seguinte código: DoCmd.ApplyFilter , "InícioContrato=#" & DateDiff("m", InícioContrato, Date) >= 12 & "# And #" & DateDiff("m", InícioContrato, Date) <= 15 & "#" Esse código como critério de consulta funciona perfeitamente: WHERE ((DateDiff("m",[InícioContrato],Date())>=12 And DateDiff("m",[InícioContrato],Date())<=15)); Já no VBA ocorre erro em tempo de execução '2427': Você inseriu uma expressão que não tem valor. Poderia me ajudar? Grato. Avelino Sampaio 26/02/2022 06:11:26 Nilson, obrigado pelo seu feedback. Sucesso! Nilson Hirata 25/02/2022 12:44:34 Boa tarde, Entendi qual foi o problema em meu código... O código_material estava configurado como texto na tabela... Mais uma vez agradeço pela atenção! Grato Nilson Hirata 25/02/2022 08:54:48 Bom dia, Utilizei o código do Maestro v 5.0 para montar um formulário de consulta com listBox e para carregar a listBox é utilizado o seguinte código: strSql = "SELECT NúmeroDoPedido, CódigoDoCliente, DataDoPedido, CidadeDeDestino" strSql = strSql & " FROM " & tblTemp & " WHERE " & filtro strSql = strSql & " ORDER BY DataDopedido;" Me!Lista.RowSource = strSql É idêntico o do Maestro sem alteração nenhuma exceto os nomes dos campos... O problema é o seguinte: A listBox fica em branco e não carrega os dados... Porém se digito no tx1 ou tx2 que são os txtBox para pesquisa ele realiza a filtragem e aparece os dados... Somente quando os txtBox ficam em branco que utiliza na Variável "filtro" o código "Codigo_Material > 0" ou no Maestro "NúmeroDoPedido > 0" ele some com o conteúdo do listBox... No Maestro esse código funciona... Mas em minha programação este código não funciona... Poderia me ajudar? Desde já agradeço pela atenção! Misael Furtado 20/02/2022 10:10:15 Obrigado Avelino pelo retorno. Como ficaria esse código acima? Eu tirei o (WHERE) mas, a listbox não carregou. Eu testei tirando o FiltroLista = filtro mas também não carregou. strsql = "qryPrincipal.ID_SOP, qryPrincipal.Zone_ID, tblZonas.Shop, qryPrincipal.Zone_Name, Count(qryPrincipal.Zone_Name) AS Qtde" strsql = strsql & " FROM tblZonas INNER JOIN qryPrincipal ON tblZonas.ID_Zona = qryPrincipal.ID_Zona GROUP BY qryPrincipal.Zone_ID, tblZonas.Shop, qryPrincipal.Zone_Name, tblZonas.ID_Zona" ' WHERE " & filtro strsql = strsql & " ORDER BY tblZonas.ID_Zona;" Me!Lista.RowSource = strsql 'filtroLista = filtro Avelino Sampaio 19/02/2022 11:59:38 Misael, sem o uso da filtragem (WHERE) a listabox carrega direitinho ? No aguardo Misael Furtado 19/02/2022 11:28:38 Avelino, muito bom esse método de filtragem e tenho aprendido bastante com o seu Kit Usando o Access e Revistas. Só uma dúvida, é possível criar o filtro com agrupamentos, soma e usando o "INNER JOIN"? Estou tentando como mostra abaixo mas, não carrega os dados na lista. strsql = "qryPrincipal.ID_SOP, qryPrincipal.Zone_ID, tblZonas.Shop, qryPrincipal.Zone_Name, Count(qryPrincipal.Zone_Name) AS Qtde" strsql = strsql & " FROM tblZonas INNER JOIN qryPrincipal ON tblZonas.ID_Zona = qryPrincipal.ID_Zona GROUP BY qryPrincipal.Zone_ID, tblZonas.Shop, qryPrincipal.Zone_Name, tblZonas.ID_Zona WHERE " & filtro strsql = strsql & " ORDER BY tblZonas.ID_Zona;" Me!Lista.RowSource = strsql filtroLista = filtro Regina Cely Silva 10/02/2022 09:19:56 MESMO ASSIM O PARÂMETRO SOLICITA O CAMPO. EU TENHO FORMULÁRIOS CHAMADOS COMO CALCULO DA VALIDADE. O FORMULÁRIO QUE MOSTRA OS DADOS É UMA FOLHA DE DADOS E ESTÁ PARA SOMENTE LEITURA. E FUNCIONA, VAI DIRETO EXATAMENTE COM ESSE COMANDO E UM BOTÃO. MAS O REGISTRO É ÚNICO ALI. AGORA TENHO UM GRID COM MUITOS REGISTROS, FOLHA DE DADOS, QUE VAI CHAMAR DADOS ESPECÍFICO DE UM REGISTRO SELECIONADO. EXEMPLO: GRID SELECIONO UM AUTOR E COM DUPLO CLIQUE ABRO O FORMULÁRIO COM DADOS DESSE REGISTRO. MAS PASSA PELA CHAMADA DE PARÂMETRO. E ISSO O USUÁRIO NÃO QUER. UM ABRAÇO, REGINA Avelino Sampaio 08/02/2022 22:30:38 Regina, se inscreva no nosso fórum e abra um tópico sobre o assunto. http://www.redeaccess.com.br Aguardo Regina Cely Silva 03/02/2022 08:53:02 A rotina é a seguinte, corrigindo: doc=[formularios]![formulario]![doc] Clausula while na macro para abrir formulário. esta macro sendo chamada de um botão ok Regina Regina Cely Silva 03/02/2022 08:22:45 Oi Avelino, Este comando funciona algumas vezes. Não quero passagem de parâmetro: [doc]![forms]![formulario]![doc] Colocado na macro que abre o outro formulário. Como disse: tenho varios forms que funcionam e abrem com os dados do primeiro. Mas não estou conseguindo: 1º form Grid com uma relacão de ações judiciais o campo chave é o sipar o 2 form são os dados da ação com este comando acima funciona mas pede que eu insira um parametro nº sipar o usuário quer que vá direto Obrigada, não pude parar pra ver a aquisição me interessa sim Regina Avelino Sampaio 30/01/2022 07:15:09 Jonatan Informe o seu email pela seção contato aqui do site, que eu te passo mais algumas dicas. No aguardo Jonatan Barbosa 29/01/2022 18:42:09 Amigo, agradeço a ajuda, mas não funcionou. Avelino Sampaio 29/01/2022 18:37:11 Jonatan, ''AtualizarComo='Entrada' AND CódigoProduto=14' Jonatan Barbosa 29/01/2022 18:29:00 Obrigado, Avelino pela ajuda, mas não funcionou. Erro de sintaxe (operador faltando) na expressão de consulta 'AtualizarComo='Entrada' E CódigoProduto=14'. Alguma ideia, amigo? Avelino Sampaio 29/01/2022 18:13:42 Jonatan, experimente assim: Expr1: DSoma("Quantidade";"Balanço";"AtualizarComo='Entrada' E CódigoProduto= " & [CódigoProduto]) Sucesso! Jonatan Barbosa 29/01/2022 17:33:10 Olá, Avelino. Estou tentando usar a função DSoma para somar o campo 'Quantidade' combinando dois critérios, mas algo não funciona. Expr1: DSoma("Quantidade";"Balanço";"AtualizarComo='Entrada'" E "CódigoProduto= & CódigoProduto") Com um critério funciona, com dois não. Desde já, grato pela ajuda. Avelino Sampaio 17/01/2022 10:07:24 Olá Pode utilizar a função dateAdd(). Exemplo da filtragem: ...WHERE DataPedido Between format(date(),'mm/yyyy') AND Format(dateadd('m', 5, date()),'mm/yyyy') Sucesso! Limitar a quantidade da lista da caixa de combinação 15/01/2022 14:17:19 Senhores, boa tarde. Gostaria de uma ajuda por favor. Como eu faço para limitar a lista da caixa de combinação? Por exemplo, eu tenho uma caixa de combinação de mês e ano eu quero que na lista aparece somente 5 meses/ano após o mês corrente. Obrigado. Avelino Sampaio 15/01/2022 07:48:14 André, aqui mesmo na seção "tutorias" leia o artigo "Referenciar objetos Forms e Reports e às suas propriedades" Bom estudo! André 14/01/2022 15:11:28 Muito bom Avelino! Parabéns!!! Você conhece de alguma maneira de preencher os campos de um Form dando dois cliques em uma linha do SubForm??? ou atualizar os campos do Form ao selecionar a linha do SubForm? é possível fazer isso? Raquel Keles 07/01/2022 15:35:50 Parabéns, suas colocações são maravilhosas. Preciso fazer uma consulta que seja atualizada automaticamente, conforme os dados são inseridos no banco de dados e que exclua os valores de data superior a 61 dias. Como posso fazer? Daniela Silva 28/12/2021 21:02:19 Prezado Avelino Tenho em uma planilha coluna com "NomeCompleto", "Cargo", "Aniversário" (este último no formato dd/mm/aaaa), dentre outras informações. Estou tentando trazer essas primeiras 3 colunas em uma listBox quando a Data de Aniversario da pessoa for igual ao mês atual. Na minha macro estou usando o código abaixo, entretanto ele não está capturando o "month(Aniversário). Como posso fazer isso? sql = "SELECT NomeCompleto, Cargo, Aniversário FROM [BD Cadastro$] WHERE month(Aniversário)=month(Date)" Abraços a todos e Feliz 2013 Como impedir a adição de um novo registro sob as condições abaixo? 28/12/2021 18:06:30 Caro Avelino, boa tarde. Numa consulta "qryPacientes" possuo os campos Pront (numérico), Paciente (Texto), DtaInternação (Data/Hora) e DtaSaída (Data/Hora) Possuo, tambem, um formulário com um subformulário vinculado à esta consulta. O que pretendo é: Ao inserir a data de Internação, "DtaInternação" num novo registro, o sistema procure na consulta "qryPacientes" pelo Prontuário do Paciente "Pront" e se verificar que a data da internação "DtaInternação" se encontre entre o período anteriormente inserido exiba uma mensagem de impropriedade e impeça de continuar. Abraços, a todos e desejo-lhe um Ano Novo repleto de realizações. tarso 25/12/2021 18:24:34 Tenho um banco de dados de hospedagem eu queria que o meu formulario de calendário por apto fizesse a leitura das reservas colocando o número da reserva na respectiva data daquela reserva (data inicial e data termino) Camilo Salomão 17/12/2021 16:44:39 Boa tarde Avelino. Estou elaborando um banco de dados para calcular a variação cambial entre os mais diferentes contratos. Por exemplo: Efetuei o cadastro "A" no dia 01/01/2012, e a cotação da moeda estrangeira era de R$ 2,00. No dia 02/01/2012, efetuei o cadastro de um contrato "B", cuja cotação era de R$ 3,00. Até o momento não tivemos cálculo de variação, pois são dois contratos distintos. Porém, no dia 05/05/2012 a cotação da moeda estrangeira para o contrato "A", passou para R$5,00. Problema: como eu faço para saber a diferença da variação, do contrato A, em um campo denominado diferença? Celso 26/11/2021 16:50:30 Obrigado pela dica Avelino. O motivo de não ser possível extrair os 8 primeiros dígitos é pq nem todos os CNPJs possuem o total de 14 dígitos, então foi necessário incluir zeros a esquerda para padronizar todos os CNPJs e em seguida, extrair os 8 primeiros. Consegui fazer com o seguinte código: Mid(Format([tbl_cnpj_inicial.CNPJ],"00000000000000"),1,8) AS CNPJ Talvez ajude alguém... Avelino Sampaio 26/11/2021 07:28:35 Tico, Não havia prestado bem atenção na sua consulta. Está faltando a clausula AS para renomear o nome da tabela, dentro da consulta. DE: ... FROM CADASTRO_DE_PRODUTOS A ... PARA: ... FROM CADASTRO_DE_PRODUTOS AS A .. Sucesso! Tico 23/11/2021 09:58:40 Avelino!! desde já agradeço a antenção prestada; quando fiz a sua dica o programa apresentou a seguinte mensagem: command not properly ended "COMANDO NÃO TERMINOU CORRETAMENTE" tem como corrigir isto? Desde já obrigado. Avelino Sampaio 23/11/2021 07:08:44 Tico, troque o comando FORM por FORMS ... A.DATA >= FORMS!MENU!DATA_INI AND A.DATA <= FORMS!MENU!DATA_FIM Sucesso! Avelino Sampaio 23/11/2021 07:06:33 Celso, neste caso não seria melhor extrair os 8 primeiros. ParteCNPJ: left([nomeCampoCnpj];8) Sucesso! Celso Santos 22/11/2021 12:27:30 Boa tarde Avelino, Poderia me ajudar na seguinte questão: Tenho uma relação de CNPJ e preciso criar uma consulta que "desconsidere" os 6 últimos dígitos. O detalhe, é que nem todos os CNPJs possuem 14 digitos que é o padrão, então neste caso teria que primeiramente acrescentar "zeros" a esquerda para deixar todos com 14 dígiots, e posteriormente excluir os 6 últimos. Como posso fazer isso? Desde já agradeço, Tico 22/11/2021 11:19:27 Avelino, Aproveitando a necessidade do João que também é a minha e vi que ele também ainda não respondeu; eu vasculhei o link enviado; porém não consegui encontrar algo parecido. O que preciso é o seguinte: tenho uma consulta de passagem no Access com o código abaixo, porém a mesma não consegue ler o formulário. Caro mestre onde estou errando? Tenho um programa no Access que abrirá um formulário(MENU) VIA MACRO autoexec; No formulário têm os campos DATA_INI e DATA_FIM (valores inseridos manualmente) ex: 01/11/2012 05/11/2012 Na consulta de passagem tenho : SELECT A.PRODUTO, A.DATA FROM CADASTRO_DE_PRODUTOS A WHERE A.DATA >= FORM!MENU!DATA_INI AND A.DATA <= FORM!MENU!DATA_FIM ORDER BY A.PRODUTO Tico 22/11/2021 11:19:24 Avelino, Aproveitando a necessidade do João que também é a minha e vi que ele também ainda não respondeu; eu vasculhei o link enviado; porém não consegui encontrar algo parecido. O que preciso é o seguinte: tenho uma consulta de passagem no Access com o código abaixo, porém a mesma não consegue ler o formulário. Caro mestre onde estou errando? Tenho um programa no Access que abrirá um formulário(MENU) VIA MACRO autoexec; No formulário têm os campos DATA_INI e DATA_FIM (valores inseridos manualmente) ex: 01/11/2012 05/11/2012 Na consulta de passagem tenho : SELECT A.PRODUTO, A.DATA FROM CADASTRO_DE_PRODUTOS A WHERE A.DATA >= FORM!MENU!DATA_INI AND A.DATA <= FORM!MENU!DATA_FIM ORDER BY A.PRODUTO Avelino Sampaio 21/11/2021 13:27:30 João, copie e cole o link abaixo no seu navegador e veja se consegue encontrar algo que deseja. http://comunidade.itlab.com.br/eve/forums?a=search&reqWords=consulta+de+passagem Sucesso! Joao 21/11/2021 11:31:28 Caro Avelino, como faço para que uma consulta de passagem do access 2010 (SQL) execute um intervalo de datas obedecendo o que é digitado em um formulário. Obrigado! Avelino Sampaio 18/11/2021 09:11:55 Vanderlei, veja um exemplo de filtragem para o formulário Me.Filter = "dataRecebimento is null" Me.FilterOn = True Sucesso! Vanderlei 18/11/2021 08:24:15 Listar em um formulário somente os dados que tenha o campo DataRecebimento em branco. Nos critérios da consulta eu consigo,l mas via código em se tratando de data eu me atrapalho. Com isso evito a repetição de consultas Grato Otavio 13/11/2021 20:50:12 Avelino sensacional consegui colocar no campo e chamar a consulta só não estou entendendo o por que só retornar um valor Fiz a consulta para se outro campo for um determinado valor ele trazer recusar se estiver tudo certo ele trazer aceitar na consulta fica tudo certo No formulário ele só fica aceita lol É a ultima vez que peço sua ajuda prometo não perguntar mais nada ahahahah muito obrigado Dim vay As String vay = DLookup("Validação", "Valida") Me!Validação = vay Avelino Sampaio 13/11/2021 13:41:32 Otavio, Monte esta sua consulta no modo gráfica use a função Dlookup() para preencher o campo, chamando pela consulta. exemplo: me!vadidação = Dlookup("Validação","NomeDaSuaConsulta") Sucesso! Otavio 13/11/2021 00:26:21 Avelino Teria como eu alimentar uma caixa de texto com um determinada consulta? Eu estou criando um campo de validação segue o macro que eu fiz não sei como colocar o respectivo valor no campo texto essa consulta leva em conta os próprios campos do formulário Na parte do me!validação que eu coloco a variável ao invés de realizar a consulta ele escreve a consulta inteira na minha tabela validação Muito obrigado pela ajuda Private Sub Validação_GotFocus() Dim val As String val = "Select iif(Status='Fechada','Recusar Material',iif(ordem is null,'Recusar Material',iif(Produto is null,'Recusar Material','Aceita'))) as Validação" val = val & " From Pedidos inner join tabela on (pedidos.ordem1=Tabela.Ordem)and(pedidos.Material=Tabela.Produto)" Me!Validação = val End Sub Avelino Sampaio 12/11/2021 03:26:50 Otavio, obrigado pelo feedback e sucesso! Otavio 11/11/2021 03:34:08 Avelino Conseguiiii Show de bola muito obrigado Desculpe pelos milhares de email Valeo Otavio 08/11/2021 17:16:04 Então texto2 foi apenas uma caixa de texto que criei no formulário sem vínculo com a tabela Vou arrumar isso mas na hora de rodar o macro não é nele que da o problema e no Me!Lista0.Filter (em todas as tentativas de fazer referencia ao listbox) Não sei nomear na macro a listbox ele da erro toda vez que tenta filtrar ou na tentativa de tirar o filtro Como ficaria pois no seu exemplo ele filtra um subformulario no que eu preciso é uma listbox alimentada pelo vba Acho que agora ficou mais preciso a informação Muito obrigado Avelino Sampaio 08/11/2021 07:58:24 Marcelo dos Santos, tente desta forma: DoCmd.OpenReport "RelNiverTexto", acViewPreview, "", "format([NASC],'mmdd') Between " & format(Forms!FrmRelNiver!Datainicio,"mmdd" & " and " & format(Forms!FrmRelNiver!Datafim,"mmdd") Se este botão que chama pelo relatório estiver no próprio formulário FrmRelNiver, vc pode reduzir a sintaxe para: DoCmd.OpenReport "RelNiverTexto", acViewPreview, "", "format([NASC],'mmdd') Between " & format(me!Datainicio,"mmdd" & " and " & format(me!Datafim,"mmdd") Sucesso! Avelino Sampaio 08/11/2021 07:39:47 Otávio, observe esta sua linha: filtro = "[texto2] like '*" & Me!Texto2.Text & "*'" [texto2] é o nome do campo lá na sua tabela ? Tem que colocar o nome do campo como esta na sua tabela. filtro = "[NomeDoCampoDaSuaTabela] like '*" & Me!Texto2.Text & "*'" Sucesso! Marcelo dos Santos 07/11/2021 22:53:38 Boa Noite Avelino Estou tentando filtrar um dia e mês em um relatório de aniversariantes DoCmd.OpenReport "RelNiverTexto", acViewPreview, "", "[Day(NASC)]>=[Forms]![FrmRelNiver]![Day(Datainicio)] and [Month(nasc)]>=[Forms]![FrmRelNiver]![Month(Datainicio)] and [day(nasc)]<=[Forms]![FrmRelNiver]![day(Datafim)] and [Month(nasc)]<=[Forms]![FrmRelNiver]![Month(Datafim)]" só q retorna vazio não esta filtrando de acordo com o critério acima Atencipo agradecimentos Otavio 07/11/2021 09:55:32 Avelino não manjo absolutamente nada de programação Criei um formulário e com o exemplo mencionado aqui consegui criar uma listbox alimentada pelo vba Porem na hora que crio um campo no formulário para filtrar essa listbox ele simplesmente não filtra Veja o que eu tentei a primeira parte da certo o resto que é para filtrar não vai de jeito nenhum texto2 é a caixa de texto que criei para o formulário list0 foi minha listbox alimentada pela consulta Valeo Option Compare Database Private Sub Form_Open(Cancel As Integer) Dim strSql As String strSql = "Select * from total" Me!Lista0.RowSource = strSql End Sub Private Sub Texto2_Change() Dim filtro As String If Len(Me!Texto2.Text & "") = 0 Then 'Se não há nada digitado, remove o filtro Me!Lista0.Filter = "" Me!Lista0.FilterOn = False Exit Sub End If filtro = "[texto2] like '*" & Me!Texto2.Text & "*'" Me!Lista0.Filter = filtro Me!Lista0.FilterOn = True End Sub acsanches 30/10/2021 20:12:32 Boa noite Avelino, Estou usando as funções abaixo no access 2.0. Estou fazendo o mesmo projeto no access 2007, mas, não está dando certo, vc teria como me ajudar. Att. Sanches ---------------------------------------------------------------------------------------------------------------- ' Cria uma cláusula WHERE usando critérios de procura inseridos pelo usuário e ' define a propriedade OrigemDoRegistro do Sub_Form_Cheque_Pagamento_Banco. Dim MySQL As String, MyCriteria As String, MyRecordSource As String Dim ArgCount As Integer Dim Tmp As Variant ' Inicializa a contagem de argumentos. ArgCount = 0 ' Inicializa instrução SELECT. MySQL = "SELECT * FROM [TAB_CADASTRO subformulário] WHERE " MyCriteria = "" ' Usa valores inseridos nas caixas de texto do cabeçalho do formulário para criar critérios para a cláusula WHERE. AdicionarAWhere [Ficha Cliente], "[FichaCliente]", MyCriteria, ArgCount AdicionarAWhere [Nome Cadastro], "[NomeCadastro]", MyCriteria, ArgCount AdicionarAWhere [Endereço Cadastro], "[EndereçoCadastro]", MyCriteria, ArgCount 'AdicionarAWhere [Classe Atendimento], "[ClasseAtendimento]", MyCriteria, ArgCount 'AdicionarAWhere [Ficha], "[Ficha_Cliente]", MyCriteria, ArgCount 'AdicionarAWhere [Telefone Residencial], "[TelefoneResCadastro]", MyCriteria, ArgCount 'AdicionarAWhere [Telefone Celular], "[TelefoneCelularCadastro]", MyCriteria, ArgCount 'AdicionarAWhere [Telefone Comercial], "[TelefoneComercialCadastro]", MyCriteria, ArgCount ' Se não há critério especificado, retorna todos os registros. If MyCriteria = "" Then MyCriteria = "True" End If ' Cria instrução SELECT. MyRecordSource = MySQL & MyCriteria ' Define a propriedade OrigemDoRegistro de Sub_Form. Me![TAB_CADASTRO subformulário].Form.RecordSource = MyRecordSource ' Se nenhum registro corresponder ao critério, exibe mensagem. ' Move o foco para o botão Limpar. If Me![TAB_CADASTRO subformulário].Form.RecordsetClone.RecordCount = 0 Then MsgBox "Nenhum Registro Cadastrado corresponde ao critério que você inseriu.", 48, "Nenhum registro encontrado" Me!Limpar.SetFocus Else ' Ativa controle na seção detalhe. 'Tmp = AtivarControles("Detail", True) ' Move o ponto de inserção para o Sub_Form. Me![TAB_CADASTRO subformulário].SetFocus End If Kelson 30/10/2021 15:54:17 Estou usando vba excel associado ao access e tentando fazer algumas consulta SQL: Dim bd As Database Dim rs As Recordset Dim SQLPeriodo As String Set bd = OpenDatabase(ActiveWorkbook.Path & "\BDFrota.mdb") Set rs = bd.OpenRecordset("SQLPeriodo") 'Por Nome e Periodo SELECT Tabela1.[Código], Tabela1.[Nome], Tabela1.[Data], Tabela1.[Cidade], Tabela1.[Estado] FROM Tabela1 WHERE (((Tabela1.[Nome])="Teste1") AND ((Tabela1.[Data]) Between #1/1/2013# And #12/31/2013#)); Só que não estou conseguindo extrair essa consulta na Planilha. Avelino Joao 29/10/2021 11:27:50 Bom Dia Santos ola veja na area de download vais encontrar exemplo sobre isso. Carlos Santos 29/10/2021 10:33:16 Senhores, bom dia! Estou com uma duvida e gostaria da ajuda de todos. Tenho uma tabela com varios campos. Gostaria de fazer uma formulario com uma COMBOBOX para selecionar meus itens e criar um relatório com todos os campos da tabela a partir de 3 seleções somente. alguem pode me ajudar??? sou leigo no assunto e preciso de ajuda. Avelino Joao 29/10/2021 08:00:51 Mestre Avelino bom dia obrigado mais uma vez por compartilha os teus conhecimentos com agente é o seguinte fiz um teste no codigo que voce mostra aqui no site sobre filtro notei ao activar a combbox ele abre Base de dado e não chefe depois de desativar a combbox então fiz uma alteração no codigo não sei, se é a melhor forma de se trabalhar com combbox mais notei que ele fecha o Bse de dados depois desativar a combbox. Aqui tens o codigo: Private Sub cboClientes_GotFocus() Dim strSql As String Dim db As DAO.Database Dim rst As DAO.Recordset On Error Resume Next strSql = "SELECT idCliente, NomeCliente FROM tblClientes WHERE Estado='São Paulo';" Me!cboClientes.RowSource = strSql rs.Close Set rs = Nothing db.Close Set db = Nothing Me.cboClientes = "" End Sub Private Sub cboClientes_LostFocus() Dim strSQL As String Dim db As DAO.Database Dim rs As DAO.Recordset On Error Resume Next strSql = "SELECT idCliente, NomeCliente FROM tblClientes WHERE Estado='São Paulo';" Me!cboClientes.RowSource = strSql Set rs = Nothing db.Close Set db = Nothing Me.cboClientes = "" End Sub Avelino Sampaio 16/10/2021 12:01:51 Pedro, Vá na seção "Tutoriais" aqui do site e leia o artigo "Referenciar objetos Forms e Reports ..." que vc irá entender o problema com o nome do seu campo. Sim, alguns vídeos não estão disponíveis ainda. Procure utilizar o Internet Explorer, pois o Firefox não consegue exibir alguns dos vídeos. Pedro Trindade 16/10/2021 11:31:56 Avelino, Depois de quebrar muito a cabeça (pois sou leigo total), consegui fazer o filtro funcionar. Graças a sua explicação. Entretanto, fiquei com uma dúvida: O nome do meu campo é "Nome do Aluno" e, pra poder fazer o filtro funcionar, tive que alterar o nome do campo para simplesmente "Nome". Pode me dizer porquê? Outra coisa: Nem todas as vídeos-aulas estão disponíveis, não é? Obrigado Alexandre Lopes 10/10/2021 07:13:10 Essas aulas de videos sao otimas,mas estou com problemas, fazer uma junçao data de nascimento e idade,isso num bd access 2007,e outra tenho uma coluna que contem varios itens com duplicaçoes com valores e meses destintos,como faço para calcular esses itensque possa me dar um total por itens. Guidemar 06/10/2021 15:03:10 Boa Tarde Avelino, Não consegui adaptar o seu conselho pois eu teria dois campos ali que pesquisaria entre duas datas. Tentei colocar mais uma caixa de texto para pesquisa por placa no frmAtendimentos mas me abre uma caixa inserir valor do parâmetro. segue o código Dim j As Boolean, filtro As String If IsNull(Me!cboCliente) Then j = True If IsNull(Me!DataInicial) Then j = True If IsNull(Me!DataFinal) Then j = True If j = True Then MsgBox "Preencha todos os campos...", vbInformation, "Aviso" Me!cboCliente.SetFocus Exit Sub End If filtro = "IdFrete = " & cboCliente.Column(0) filtro = filtro & " AND Tb_ControleContainer.bd_Data Between #" & Format(Me!DataInicial, "mm/dd/yyyy") & "# AND #" & Format(Me!DataFinal, "mm/dd/yyyy") & "#" '---------------------------------------------------------------------------------------------------------------------------------------------------------------- filtro = "bd_placa = " & TexPlaca sfrmConsulta.Form.Filter = filtro sfrmConsulta.Form.FilterOn = True se puder me ajudar te agradeço. Moreschi 03/10/2021 13:37:21 Grande Avelino, Na mosca. Obrigado e um grande abraço. Avelino Sampaio 03/10/2021 11:05:36 Moreschi , Experimente assim: ... Set cr = CurrentDb.OpenRecordset(SQL) ' executa a consulta cr.MoveFirst Me!Comentarios="" Do Me!Comentarios =Me!Comentarios & cr("depto") & " " & cr("reg") & " " & cr("nome") & Chr (13) & Chr(10) cr.MoveNext Loop Until cr.EOF Sucesso! Moreschi 03/10/2021 10:49:36 Olá Estou tentando colocar os nomes de uma consulta num campo texto, um em cada linha, mas não está dando certo. Dim SQL As String Dim cr As Recordset SQL = "SELECT FuncionariosPonte.Reg, FuncionariosPonte.Nome, FuncionariosPonte.Depto, FuncionariosPonte.Acrescenta" SQL = SQL & " FROM FuncionariosPonte" SQL = SQL & " WHERE (((FuncionariosPonte.Acrescenta)=-1));" Set cr = CurrentDb.OpenRecordset(SQL) ' executa a consulta cr.MoveFirst Do Me.Comentarios = cr("depto") & " " & cr("reg") & " " & cr("nome") Chr (13) & Chr(10) cr.MoveNext Loop Until cr.EOF Avelino Sampaio 01/10/2021 07:55:21 Guildemar, use a técnica empregada no exemplo do formulário frmFiltraFormContinuo. Neste exemplo ele usa dois campos. Para expadir para 4, use a combinação: If Len(Me!tx1.Text & "") > 0 Then j = j + 1 If Len(Me!tx2 & "") > 0 Then j = j + 2 If Len(Me!tx3 & "") > 0 Then j = j + 4 If Len(Me!tx4 & "") > 0 Then j = j + 8 Com isso , vc terá 16 combinações possiveis de filtragem no SELECT CASE. Bom estudo! Guidemar 30/09/2021 04:16:58 Boa Noite Avelino, Primeiro quero te dar meus parabéns, seus exemplos são ótimos, seu artigo espetacular. Num dos seus exemplos de filtragem(frmAtendimentos) tem três campos de filtro, se eu acrescentar mais um compo(Marca), posso filtrar através de um campo individual ou mais de um ou ate mesmo os quatro campos juntos, é possível?, se puder me mandar o exemplo ou até mesmo postar o código agradeço desde já. Email: guidemar2010@hotmail.com ZAck 28/09/2021 18:36:57 Montei um filtro, sendo que os resultados deste filtro preciso abrir as paginas já montadas em Html. Alguem pode me ajudar ? Moreschi 24/09/2021 10:45:39 Bom dia Avelino, como vai? Este código abaixo é para um formulário ler uma consulta de referência cruzada. Como faço para um relatório? É que eu gostaria de imprimir. Abraços e obrigado Private Sub Form_Open(Cancel As Integer) If Me.RecordsetClone.RecordCount = 0 Then MsgBox "Não há registros a exibir." & vbCrLf _ & "Cancelando o Formulário...", _ vbInformation, "Sem Registros" Cancel = True End If End Sub Private Sub Form_Load() On Error GoTo Trata_Erro: Dim rs As Recordset, I As Integer Set rs = Me.RecordsetClone ' Define o recordset. With rs For I = 0 To .Fields.Count - 1 Me("c" & I).ControlSource = .Fields(I).Name Select Case I Case 0, 1 Me("t" & I).Caption = .Fields(I).Name Case 2 Me("t" & I).Caption = "JAN" Case 3 Me("t" & I).Caption = "FEV" Case 4 Me("t" & I).Caption = "MAR" Case 5 Me("t" & I).Caption = "ABR" Case 6 Me("t" & I).Caption = "MAI" Case 7 Me("t" & I).Caption = "JUN" Case 8 Me("t" & I).Caption = "JUL" Case 9 Me("t" & I).Caption = "AGO" Case 10 Me("t" & I).Caption = "SET" Case 11 Me("t" & I).Caption = "OUT" Case 12 Me("t" & I).Caption = "NOV" Case 13 Me("t" & I).Caption = "DEZ" End Select Me("c" & I).Visible = True Me("t" & I).Visible = True Next I End With rs.Close Set rs = Nothing ' Libera memória Exit Sub Trata_Erro: Call InformaErro 'Função do módulo basUtilitarios. End Sub Heitor 19/09/2021 14:44:06 Galera preciso em VBA valeu muito obrigado Heitor 19/09/2021 14:42:42 Boa Tarde Galera Preciso fazer o seguinte, tenho uma lista com varios produtos e entre eles eu digito entrada e saida em uma caixa de texto, ex: tubo 5/8 entrada : 5 saida 5 saldo total: 0, ai eu vo e mudo faço isso para varios outros pordutos e quando eu volto em tubo 5/8 ele me exibe o valor 0, ou seja o ultimo valor de cada item. Me Ajudem Por Favor Desde ja Muito Obrigado Email: heitor.luiz@hotmail.com Carlos Oliveira 16/09/2021 19:53:23 Prezado Avelino, Quero agradecer pela orientação prestada no fórum. Agora, gostaria de "dificultar" um pouco: A ideia é fazer que uma caixa de mensagens, denominada DATA INICIAL, apareça já com uma data, que no caso seria a do dia corrente. Reproduzo a orientação que você me forneceu: SELECT PAGAMENTOS.DataPagamento, PAGAMENTOS.ValorPagamento, PAGAMENTOS.Despesa FROM PAGAMENTOS WHERE (((PAGAMENTOS.DataPagamento) Between date() And [DATA FINAL])); Grato, mais uma vez! Tomé Vicente 14/09/2021 20:29:00 Onde posso encontrar a bd Maestro2 ? Avelino Sampaio 12/09/2021 05:52:08 Alexandre, crie uma combobox com origem na tabela OM e acrescente todos os campos necessários nesta combo. Assim que selecionar um item da combo vc terá todos os valores correspondentes nas colunas e que devem ser passados para os campos no formulário. Use o assistente para montar a combo. Copie e cole no seu navegar o endereço abaixo, aonde ofereço um exemplo de combobox. http://www.usandoaccess.com.br/dicas/dica32.asp?id=1#inicio Sucesso! Alexandre Alves Pereira 11/09/2021 13:51:10 Tenho uma tabela de filiais denominada "OM" com os campos: "sigla", "nome", "endereço", "Bairro", etc. Tenho uma segunda tabela denominada "rol" onde meus clientes estão relacionados. Tenho em ambas as tabelas campos com o mesmo nome: Sigla OM, Nome OM, Endereço OM, Nº OM, Complemento OM, Bairro OM, Cidade OM, UF OM, CEP OM, País OM, Minha intenção é de que no formulário de entrada da tabela Rol, quando inserido a "sigla OM", ele comparasse esse campo com o campo "sigla OM" da tabela "OM" e preenchesse automaticamente os demais. Como fazer isso? E onde inserir o comando no formulário do ACCESS? Onde colocar o evento? Sou iniciante no ACCESS. Podem ajudar-me? Avelino Sampaio 07/09/2021 09:44:39 Tiago, em um novo módulo, copie a seguinte função: Function fncSomaListBox(strRowSource As String, Coluna As Byte) As Currency dim rs as dao.recordset Set rs = CurrentDb.OpenRecordset(strRowSource) While Not rs.EOF fncSomaListBox = fncSomaListBox + rs.Fields(Coluna) rs.MoveNext Wend Set rs = Nothing End Function Como "Origem do controle" da caixa de texto que receberá a somatória, digite: =fncSomaListBox(SuaListBox.RowSource;8) Caso você tenha problemas em virtude da incompatibilidade de SQL provocada pela utilização do filtro, poderá utilizar a função abaixo: Function fncSomaListBox(ListBox As Control, Coluna As Byte) As Currency Dim ctl As Control Set ctl = ListBox ctl.BoundColumn = Coluna For i = 0 To ctl.ListCount - 1 fncSomaListBox = fncSomaListBox + ctl.ItemData(i) Next Set ctl = Nothing End Function Neste caso, você deverá utilizar a seguinte expressão na TextBox: =fncSomaListBox(SuaListBox;8) Ambas funções poderão ser utilizadas para somar qualquer coluna, bastando alterar tal argumento. Saliento a necessidade de se chamar o Recalc após alterar a data para filtragem da ListBox. Sucesso! Tiago Martins 05/09/2021 17:20:47 Avelino, obrigado por todas as dicas. Estou iniciando nesta aventura de programação e estou achando muito interessante, porém tenho apanhado muito.... Estou criando um banco de dados onde em um formulário gostaria que na caixa de texto não acoplada, apareça o somatório dos valores de um campo especifico de uma caixa de listagem que está sendo filtada dentro do formulário. Tentei gerar uma função publica onde soma os itens da coluna desta caixa de listagem e como valor padrão da caixa de texto coloquei a função publica. Porém tem dando erro na função, acredito que estou escrevendo errado a função. Pode me dar um auxilio de como fazer a soma de um item da caixa de listagem que está sendo filtrada? 'Public Function fnctotal() As Long 'fnctotal = Soma(Me![Lista].[Column](8)) 'End Function Mais uma vez agradeço pela ajuda. Antonio Ozael 01/09/2021 18:35:48 Caro Avelino, Obrigado pelas dicas. Gostaria de saber como faço para comparar e sincronizar tabelas de dois bancos de dados diferentes (de clientes diferentes) para atualizar as tabelas. Preciso atualizar apenas alguns campos novos das tabelas, sem alterar os dados cadastrados dos clientes. Atualmente uso um programa para comparar os bancos e verificar quais as tabelas que estão diferentes. Depois disso copio os campos da tabela mais nova e colo na mais antiga do outro banco. Tem algum comando no qual poderia verificar o que há de diferente nessas tabelas e copiar esses novos campos automaticamente(comparar as tabelas dos dois bancos, encontrar as diferenças na estrutura e sincronizá-las)? Lucas Gimenes 29/08/2021 11:35:07 Avelino, bom dia. Estou com duas dúvidas: 1° - Tenho 3 ComboBox onde cada uma faz uma filtragem diferente. O que eu preciso é: filtro a ComboBox 1 - Ordem de Serviço (existe O.S com mesma numeração) Com essa O.S eu filtraria na ComboBox 2 a Disciplina. E por fim na ComboBox3 eu filtraria o Colaborador. Todo esses filtros eu consigo enxergar numa ListView e estou utilizando SQL pra filtragem de uma tabela do Excel+Access. 2° - Como atualizar uma ListView? Gostaria de mudar por exemplo um nome do Cliente e toda a minha ListView onde estiver com o nome do Cliente irá atualizar. DESDE JÁ AGRADEÇO PELA AJUDA!!! Att, Lucas Gimenes Moreschi 28/08/2021 11:51:28 Olá Avelino, já achei a resposta. Me.RecordSource = "Select * From NomeDaTabela" Abraços Moreschi 24/08/2021 11:07:54 Olá Avelino, como vai? Gostaria de saber se é possível um sub formulário não vinculado a uma tabela inserir várias linhas para alguns campos? Eu tenho uma linha com um campo "Codigo" e um campo "Nome", gostaria que fosse aparecendo outras linhas como se este sub formulário estivesse vinculado a uma tabela. Abraços Tomé Vicente 23/08/2021 19:46:06 Muito muito bom! Estevam Marinho 23/08/2021 10:26:10 Avelino Criar consultas pelo Sql em vez de pelo modo gráfico torna o sistema mais rápido - com melhor desempenho em redes? Usar "procedimento do evento" com a escrita dos códigos em vez de macros torna o sistema mais rápido - com melhor desempenho em redes? Estevam Antonio Carlos 21/08/2021 15:38:20 TENHO 2 TABELAs simples DE ALUNOS COM AS RESPECTIVAS NOTAS (uma do fundamental e outra do médio) a do fundamental a pesquisa funciona normal já a do médio também funcionava até ontem quando fui fazer a consulta e apareceu a seguinte mensagem: "É NULO / É NEGADO NULO". Sou iniciante e gostaria de saber se poderia me ajudar? Avelino Sampaio 10/08/2021 09:09:46 Andre, obrigado pelo feedback e pelo link. Sucesso! Andre 10/08/2021 08:49:28 Pessoal, Obrigado pelo retorno. As queries resultado da selacao das frutas (no listbox) sera carregada no proprio formulario, em outros listbox. ± assim. Tenho 4 listbox, que sao carregados no load do form e estao funcionando perfeitamente. Logo abaixo de cada listbox eu coloquei um botao. Quando dou um click neste, entao o evento deve pegar os campo(s) selecionados (ou considerar todos caso nao haja selecao) e passar como parametro para outras 3 queries. Essas outras queries estao ligadas aos outros 3 listbox. Assim, quando dou um click, os outros 3 listbox sao atualizados (atraves de suas proprias queries e um comando requery) baseados nos itens selecionados no primeiro. Esta acao 'e realizada para qualquer listbox que eu venha a dar um click no seu respectivo botao query. Ou seja, a selecao em um listbox + botao query sempre ira atualizar os outros tres. Ainda ontem, depois de postar essa duvida aqui, eu acabei achando um exemplo perfeito para o que eu precisava. Apliquei e deu muito certo. No link abaixo tem o examplo bem ilustrado e detalhado. http://www.blueclaw-db.com/multi_select_parameter_form.htm De qualquer forma, agradeco e retorno e o interesse na solucao dessa implementacao. Moreschi 09/08/2021 16:57:07 Olá André, Na sua consulta (query) tem que aparecer todas as frutas de uma vez (as escolhidas no listbox) ou uma por vez? Avelino Sampaio 09/08/2021 16:31:16 Andre, A query será usada para carregar um relatório ou um formulário ? No aguardo Andre 09/08/2021 15:22:55 Boa tarde. Criei um Listbox dentro de um Form (Access), atrelado a uma query. Defini este Listbox como multipla selacoes simples. Digamos que abri o formulario e no listbox selecionei as opcoes laranja, maca e uva. Como faco para capturar os itens selecionados no listbox e passa-los como parametro para um campo criterio de uma query? obrigado Benedito Soares 07/08/2021 14:51:24 Boa Tarde! Prezado Avelino, estou trabalhando com subformulários vinculados ao principal. Saberia, por favor dizer o porque ao sair do subform, exatamento o campo de vinculo do form principal apaga a informação contida nele. Meu campo de vinculo chama-se trimestre. Grato. Moreschi 06/08/2021 10:41:57 Jaffer Coloque um espaço antes de cada palavra. strSql = strSql & " FROM TabCliente " strSql = strSql & " WHERE NomeDoCliente like ""*" & filtro & "*"" " strSql = strSql & " ORDER BY NomeDoCliente;" Só nestas 3 linhas, a primeira não tem espaço CJota 31/07/2021 08:56:51 Bom dia Avelino! Estou com dificuldade no comando SQL para gerar um relatório filtrando por período e nome simultaneamente. Estou trabalhando em VB10 e o meu banco é Access 2000. Tenho no meu banco a TB_ALIMENTACAO que guarda as informações de consumo de cada funcionário do meu restaurante (exemplificando apenas). No final do mês, quero um relatório detalhado de cada consumo do funcionário e o total do consumo para ser descontado do pagamento. Tentei o código abaixo, sugerido por você: Format(me!txDataInicial,"mm/dd/yyyy") & "# AND #" & Format(me!txDataFinal,"mm/dd/yyyy") Mas o VB não aceita. Fiz algumas alterações e ficou assim: filtro = Convert.ToDateTime(dtpInicio.Text) & "# AND #" & Convert.ToDateTime(dtpFinal.Text) comando.CommandText = "SELECT * FROM TB_ALIMENTACAO WHERE Data BETWEEN #" & filtro & "#" Onde: dtpInicio=data inicial; dtpFinal= data final Assim como está, ele me traz os dados de todos os funcionários. Preciso agora que ele me traga os dados apenas do funcionário selecionado no combobox (cmbNome) mas não consegui saber onde colocar o filtro. Também não consegui fazer a ordenação. Se puder me dar uma dicas ficarei muito agradecido. Ah! e parabéns pelo site. Está muito bacana. Avelino Sampaio 30/07/2021 10:58:29 Moreschi, leia o meu turorial "64 bits - Seus aplicativos no futuro do presente" para saber como adptar a API para os 64 bits Bom estudo! Moreschi 30/07/2021 10:50:40 Avelino, obrigado pelo Link. Esta declaração funciona em 32 bits, mas não em 64. Você sabe como transformá-la? Declare Function BuildCommDCB Lib "kernel32" Alias "BuildCommDCBA" (ByVal lpDef As String, lpDCB As DCB) As Long Abraços Moreschi 29/07/2021 14:27:39 Olá Luan Pignata , crie dois campo no formulário, dti e dtf (data inicial, data final). Na sua consulta, na linha de critério, coloque: >=forms!nomeDoSeuFormulário.dti e <=forms!nomeDoSeuFormulário.dtf Abraços Avelino Sampaio 28/07/2021 09:31:02 Moreschi, copie e cole o endereço abaixo no seu navegador: http://comunidade.itlab.com.br/eve/forums?a=search&reqWords=porta+serial+com Boa pesquisa! Moreschi 27/07/2021 07:31:10 Olá Avelino, como vai? Como faço para ler a porta serial Com1 em access? Estou querendo ler o peso de uma balança do caixa de supermercado. Abraços e obrigado ISAC ALVES 23/07/2021 13:24:55 CARO, GOSTARIA DE FAZER INCUSÃO DE REGISTRO EM UMA TABELA APROVEITANDO OS DADOS DE UMA OUTRA, OU SEJA QUANDO DIGITAR UM CAMPO COMO MATRICULA ELE JÁ INCLUIR O NOME ENDREÇO ETC. DESTE CLIENTE QUE JÁ SE ENCONTRA NUMA TABELA CADASTRO, SÓ INCLUIRIA DADOS NOVOS ,PENSO QUE SERIA UM RELACIONAMENTO DE TABELAS. MEU E-MAIL É ISACEDUCAR@HOTMAIL.COM katia fernandes 22/07/2021 13:56:25 Obrigada Avelino, coloquei a ordem no relatório e tudo funcionou. Tenho como guardar em algum campo esta ordem? Avelino Sampaio 20/07/2021 07:41:09 Luan, use a função format() para realizar a filtragem desejada. Exemplo: docmd.OpenReport "NomeRelatório", acViewPreview , ,"format(DataEntrada,'yyyymm') =" & year(date()) & me!campoMês) Sucesso! Avelino Sampaio 20/07/2021 07:26:12 Katia, Veja o meu tutorial "Somar, contar e NUMERAR em relatórios" e aprende como numerar. Sucesso! Josney Góis 19/07/2021 21:25:46 Estou com dúvidas com listas. Como faço para salvar os valores da lista e como vinculá-los ao "id" de uma tabela? Na realidade, quero criar um controle de movimentação dos registros, jogar na lista o login do usuário e os campos que este usuário alterou ou incluiu, "movimentou". Vc pode me ajudar a criar esta lista? Já sei como jogar os valores na lista, mas como salvá-la e vincular a um "id" não sei como fazer. fico agradecido pela ajuda anterior. MARCOS OLIVEIRA 19/07/2021 17:44:46 BOA TARDE AVELINO. Preciso de uma ajuda. Tenho uma tela no meu sistema chamada “consulta devedor” quero criar uma CAIXA DE COMBINAÇÃO para filtrar todos os DEVEDORES de um determinado CLIENTE no CÓDIGO DO MEU NEGOCIADOR. Em suma quero criar 2 (duas) caixas de combinação onde meu NEGOCIADOR insira na primeira seu CÓDIGO e na segunda o CÓDIGO DO CLIENTE e assim o sistema me liste todos os devedores deste cliente no código do meu negociador. Nomes das minhas tabelas: Tab_negociador Tab_cliente Tab_devedores OBRIGADO AGUARDO RETORNO katia fernandes 19/07/2021 11:12:26 Bom dia Avelino Estou com um pq problema, veja se pode me ajudar. Tenho um relatório como notas de candidatos ordenados da maior para a menor nota, e gostaria de colocar um campo classificando (1°, 2º, 3º) e não sei como fazer, você pode me dar alguma dica? Luan Pignata 19/07/2021 10:16:27 Iae mano, gostei muito do seu tutorial, andei procurando em vários lugares e os seus ajudam bastante, mas to precisando de uma ajuda, eu fiz um controle de estoque, onde tem cadastro de clientes, fornecedor, e tem a data de entrada e de saida, e queria colocar para quando eu fosse imprimir um relatorio, eu escolhesse o mes e o ano, soh eles dois da data de entrada, para poder imprimir soh aquelas caixas que entraram no mes que eu quero, se puder pf, me ajuda, ou entao me de algumas dicas. Avelino Sampaio 19/07/2021 08:07:06 Josney, a propriedades "Tipo de Origem da Linha" tem que estar setada para "Lista de valores". Pode ser setado pelo VBA. Exemplo: Me!TesteLista.RowSourceType = "Lista de valores" Me!TesteLista.AddItem "Josney" Sucesso! Josney Góis 18/07/2021 20:00:37 Ola, Avelino, Boa Noite. Não consigo jogar os valores de um testbox dentro de um listbox com apenas uma coluna Private Sub testa_Click() Dim testando As String testando = "josney" Me!testelista.RowSource = testando End Sub Não aparece nada dentro da listbox Moreschi 12/07/2021 10:36:29 Olá Avelino, como vai? Como faço para saber os nomes dos campos de uma tabela usando VBA? Abraços e obrigado Eduardo Souza 11/07/2021 18:58:05 Avelino, se você continuar assim, sugiro que você pense em conceder certificação a "futuros programadores". Gostei muito desse tópico sobre filtragem, que chega ser melhor do que muito manual oficial da Microsoft. Um abraço. Josney Góis 09/07/2021 22:13:32 Boa Noite Avelino, Com sua resposta conseguir resolver o problema. O campo e do tipo String. Obrigado, DEUS TE ABENÇOE Avelino Sampaio 08/07/2021 08:59:38 Moreschi, copie e cole o endereço abaixo no seu navegador. http://maximoaccess.maisforum.com/t17780-resolvidoproblemas-em-colocar-todos-os-arquivos-numa-listbox Deverá se inscrever no fórum para ter acesso aos códigos. Sucesso! Moreschi 07/07/2021 15:33:22 Olá Luiz Roberto, Esta eu sei. Na consulta da cidade e no campo UF, digite: forms!seuFormulario.nomeDoCampo_UF Ao escolher o estado, só vai aparecer as cidades deste. Abraços Moreschi 07/07/2021 15:29:21 Olá Avelino, como vai? Como faço para contar a quantidade de diretórios e subdiretórios? Na verdade eu quero listar os arquivos que estão dentro destes diretórios (pastas). Abraços Jaffer Silva Calhau 06/07/2021 00:41:19 Sr. Avelino Boa noite Fiz a o formulario frmNovoCliente que tem no Maestro v3 só que acredito ter feito como consta nos código que vc fez no entanto esta dando o seguiunte erro quando abro o formulario ele da erro em tempo de execução 438 quando mando depurar ele sinaliza em amarelo a linha: Me!Lista.RowSource = strSql Estou usando o acces 2010 Abraço!!!!! Segue o codigo abaixo. Option Compare Database Private Function fncCarregaLista(filtro As String) Dim strSql As String strSql = "SELECT Código, NomeDoCliente " strSql = strSql & "FROM TabCliente " strSql = strSql & "WHERE NomeDoCliente like ""*" & filtro & "*"" " strSql = strSql & "ORDER BY NomeDoCliente;" Me!Lista.RowSource = strSql End Function ' Private Sub BtSalvar_Click() Dim rs As DAO.Recordset Dim id As Long If Len(Me!Texto2 & "") = 0 Then Me!Texto2.SetFocus Exit Sub End If If Dcount("*", "TabCliente", "NomeDoCliente = """ & Me!Texto2 & """") = 1 Then MsgBox "Cliente já cadastrado...", , "Aviso" Me!Texto2.SetFocus Exit Sub End If Set rs = CurrentDb.OpenRecordset("TabCliente") rs.AddNew id = rs!Código 'captura o número exclusivo do novo registro rs!NomeDoCliente = Me!Texto2 rs.Update rs.Close Set rs = Nothing Forms!ForTabCliente.Filter = "Código = " & id Forms!ForTabCliente.FilterOn = True Forms!frmClientes!cli_Endereço.SetFocus DoCmd.Close acForm, "frmNovoCliente" End Sub Private Sub Lista_DblClick(Cancel As Integer) Forms!ForTabCliente.Filter = "Código = " & Me!Lista.Column(0) Forms!ForTabCliente.FilterOn = True Forms!ForTabCliente!NomeDoCliente.SetFocus DoCmd.Close acForm, "ForNovoCliente" End Sub Private Sub Texto2_Change() Call fncCarregaLista(Me!Texto2.Text) End Sub Private Sub Texto2_GotFocus() Me!Texto2.SelStart = Len(Me!Texto2 & "") Call fncCarregaLista(Me!Texto2.Text) End Sub Private Function fncLimpaCampos() Me!Texto2 = Null contaRazao = 0 Me!Lista = -1 Me!Texto2.SetFocus End Function Juliano Lopez 05/07/2021 18:06:58 Então Avelino, eu queria fazer alterações em funções sem precisar desconectar o banco para isso. Se estiver em um modulo, não posso reescrever quando alguém estiver conectado. A necessidade surgiu em corrigir uma formula no VBA mesmo com os usuários usando o banco. Ou até mesmo, incluir uma nova função. Exemplo: a função1 iria gerar uma msg box. Porém, eu gostaria que a hora fosse gravada. Logo, eu iria criar a função2 e escrever na tabela de funções, dentro da função1, que deveria ser chamado a função2 após a caixa de msg. Avelino Sampaio 05/07/2021 17:38:10 Juliano funções são armazenas no módulo global e não em tabelas. Qual o foi motivo de guardar os códigos em uma tabela ? No aguardo Juliano Lopez 05/07/2021 08:58:54 Avelino, bom dia. Queria te pedir ajuda com o seguinte. Tenho varias funções gravadas em tabelas. Gostaria de chamar essas funções pelo VBA. A minha tabela se chama TFuncs, tem um campo ID (numero) e um campo FunçãoEscrita (memorando). Ao clicar no texto1 dentro de meu forms, quero que ele faça uma especie de dlookup() nesta tabela e já execute o que vai estar escrito dentro dela. Uma segunda opção, seria já pegar uma caixa de texto dentro do forms, escrever a função ali e pedir para o access executar ela. Porém ainda não consegui localizar uma forma de fazer isso. Obrigado por sua atenção a todos que postam aqui em seu site. Site que por sinal é uma "mão na roda". Melhor, uma não... duas mãos na roda... rsrs Abraço. JLopez Avelino Sampaio 05/07/2021 08:03:44 Josney, o campo [AutApa] é do tipo string ou número ? se for do tipo string, utilize: Private Sub verapas_Click() dim filtro as string filtro="[AutApa] = '" & Me.cbrdele.Column(0) & "' And ([dtinst] between #" & Format(Me!dataini, "mm/dd/yyyy") & "# AND #" & Format(Me!datafinal, "mm/dd/yyyy") & "#)" DoCmd.OpenReport "RelatorioAPA", acViewReport, , filtro DoCmd.Maximize End Sub Se for do tipo número: Private Sub verapas_Click() dim filtro as string filtro="[AutApa] = " & Me!cbrdele.Column(0) & " And ([dtinst] between #" & Format(Me!dataini, "mm/dd/yyyy") & "# AND #" & Format(Me!datafinal, "mm/dd/yyyy") & "#)" DoCmd.OpenReport "RelatorioAPA", acViewReport, , filtro DoCmd.Maximize End Sub Sucesso! Jaffer Silva calhau 05/07/2021 00:51:58 Sr. Avelino boa noite!!! estou trabalhando num formulario cadastro de cliente mas gostaria dem fazer comando de filtragem é aplicado em formulários e em relatórios que possuem o foco. Por exemplo, no cadastro de clientes, tem uma combobox aonde se seleciona o cliente de interesse para a exibição do seu respectivo cadastro, só que eu precisava filtra com duas condição, por nome ou por cpf, para evirar que seja cadastrado um pessoa mais que uma vez. assisti a sua aula, enendi, só gostaria de ssaber se a montagem dos codigo é o memso, tendo envista que o campo cpf esta no campo 5 não se se a ordem altera o funcionamento da escrita do código e o carregamento do formulario. Josney Góis 04/07/2021 22:03:13 Boa Noite Avelino, Quando eu faço um filtro para abrir um relatório por um campo string e outro por data o compilador acusa tipos incompatíveis. Vc pode me ajudar? código: Private Sub verapas_Click() DoCmd.OpenReport "RelatorioAPA", acViewReport, , "[AutApa] like'" & Me.cbrdele.Column(0) & "'" 'And "[dtinst] between #" & Format(Me.dataini, "mm/dd/yyyy") & "# AND #" & Format(Me.datafinal, "mm/dd/yyyy") & "#" DoCmd.Maximize End Sub End Sub Rodrigo Cruvinel 02/07/2021 15:26:43 Consegui, tive que fazer umas mudanças no outro Formulário. Obrigado Rodrigo Cruvinel 02/07/2021 14:59:33 Private Sub Lista8_DblClick(Cancel As Integer) DoCmd.OpenForm "NovoCliente" Forms!NovoCliente.filter = "Nome = " & Me!Lista8.Column(0) Forms!NovoCliente.FilterOn = True Forms!NovoCliente!Nome.SetFocus DoCmd.Close acForm, "CadastrodoCliente" End Sub Está dando erro! Como faço? Rodrigo Cruvinel 02/07/2021 14:54:08 Hahaha' Consegui filtrar, só falta clicar duas vezes. Obrigado, baixei seu arquivo e ele me auxiliou. Rodrigo Cruvinel 02/07/2021 14:42:07 Boa Tarde Avelino, Primeiramente eu gostaria de te agradecer pelas aulas e pelas explicações. Mas estou aprendendo ainda e não conseguir realizar no meu projeto o filtro dinâmico em list box. Bom, eu possuo uma Tabela com o nome de Clientes onde tem o campos: IdClientes, Nome, Sexo, Data de Nascimento, CPF... e possuo um formulário onde eu cadastro o cliente e preencho todos esses campos, e se chama NovoCliente. Só que, antes de eu cadastrar o cliente, abre-se um outro formulário para visualizar se o cliente já existe, chamado de PesquisaCliente. Esse formulário é o início desse processo. Possui uma caixa de texto onde eu escrevo o nome do cliente (chamado de Texto3), dois botões cujo um deles limpa esse campo (Texto3) e o outro copia esse campo (Texto3) para o campo "Nome" do Próximo formulário (NovoCliente) que se abrirá automaticamente para continuar o cadastro. Certo, Essa é a vizualização do formulário PesquisaCliente. Mas a parte importante é que embaixo dos botões e da caixa de texto criei uma Caixa de listagem que eu gostaria que filtrasse os valores que eu escrevesse no Campo "Texto3", e após filtrar e achasse o cadastro que eu queria, eu clicar duas vezes no resultado da filtragem e abrisse o Formulário "NovoCliente" para visualizar todo o cadastro dele. É apenas isso, o senhor já demonstrou mas não consegui fazer. Lhe agradeço desde já. Luiz Roberto 30/06/2021 11:13:15 Estou estudando por conta própria e comecei a montar um BD em Access 2010. Montei um formulário para cadastrar empresas e nela há duas caixas de combinação. Uma que contém os Estados brasileiros, origem na tabela TBL_UF, com sigla e nome de cada Estado e a outra, origem na tabela TBL_CIDADES, que contém as siglas dos Estados e os nomes dos Municípios.. Quero que, ao escolher um Estado, na caixa seguinte só apareçam os nomes dos municípios referentes ao Estado escolhido. Como faço isso? Elvis Correia 22/06/2021 10:50:30 Bom dia Avelino, eu estou aprendendo os comandos que voce deixou para copiar, mas nao consegui resolver um problema no meu projeto. eu preciso localizar um lançamento pelo código do romaneio de cadastro, mas nao quero usar o combolist quero usar um campo onde digita o código e localizo as informações digitadas. Nome do Campo = idRomaneio Tabela de Dados = cadRomaneio Tabela Consulta = conRomaneio Formulario de lançamento = lanRomaneio desde ja agradeço e pretendo comprar seu kit para estudar em breve!!! Avelino Sampaio 19/06/2021 00:02:12 Pedro muito obrigado pelo seu feedback. Sucesso! Pedro Lucas Cipollini Gomes 18/06/2021 15:53:17 Avelino você é espetacular. Sinceramente, o jeito que você usa function, é assustador. Você não é bom, você é bom pra caralho! (perdoe o palavrão). Sério , ressaltando mais uma vez , o jeito que você combina function é absurdo. Parabéns, que Deus continue te inspirando muito e obrigado por compartilhar seu conhecimento! Gil 16/06/2021 10:11:32 Amigo Avelino, antes de tudo agradeço a Deus por existir pessoas como você que se prontifica a ajudar quem ainda não sabe andar (meu caso no access). vi e pus em em pratica seus ensinos, agora preciso,se possivel que me ajude em uma função, meu filtro ja esta funcionando quando faço busca pelo nome do cliente, agora como faço para filtrar também por outro critério ao mesmo tempo? no meu caso apelido (que é muito usado aqui onde moro). Grande abraço e mais uma vez obrigado. Avelino Sampaio 14/06/2021 07:30:44 Moreschi, obrigado pelo feedback e sucesso no seu projeto! Moreschi 13/06/2021 11:50:40 Grande Avelino, Após fazer o que você recomendou, continuou sem filtrar. Coloquei entre parantisis e veja como ficou. Agora esta funcionando. SQL = "SELECT * FROM CRMcontatosDiversos where" SQL = SQL & " (CRMcontatosDiversos.[Tipo] = 2 or CRMcontatosDiversos.[Tipo] = 4)" SQL = SQL & " and CRMcontatosDiversos.[DataPV] Between #" & Format([Dti], "mm/dd/yyyy") SQL = SQL & "#And #" & Format([Dtf], "mm/dd/yyyy") & "#" SQL = SQL & " Order by CRMcontatosDiversos.[dataPV];" Set cr = CurrentDb.OpenRecordset(SQL) ' executa a consulta Muito obrigado mais uma vez. Esta foi difícil, mas com a sua ajuda consegui. Avelino Sampaio 13/06/2021 07:56:59 Moreschi, primeiro realize teste individuais e por fim junte as partes: Teste 1: SQL = "SELECT * FROM CRMcontatosDiversos where Tipo = 2 Or Tipo = 4" SQL = SQL & "< ESPAÇO >Order by data;" Teste 2: Use o BETWEEN e a tralha (#) e procure não usar o nome DATA que é reservado do Access SQL = "SELECT * FROM CRMcontatosDiversos WHERE" SQL = SQL & "< ESPAÇO > CRMcontatosDiversos.[Data] Between #" & Format([Dti], "mm/dd/yyyy") SQL = SQL & "# And #" & Format([Dtf], "mm/dd/yyyy") & "#" SQL = SQL & "< ESPAÇO >Order by CRMcontatosDiversos.[data];" Tudo funcionando, junte as duas partes Sucesso! Moreschi 13/06/2021 07:40:32 Bom dia Avelino! Realmente resolveu o problema de sintaxe, mas não está filtrando. Informo no formulário 01/05/12 31/05/12 ---> resultado: vem dados desde 2003, ou seja, todos os dados da tabela. Por que será que não está filtrando? Abraços Avelino Sampaio 13/06/2021 04:34:08 Moreschi, qual é o erro que acusa ? Erro de sintaxe ? Inclua espaços nos locais indicados. SQL = "SELECT * FROM CRMcontatosDiversos where Tipo = 2 Or Tipo = 4 " SQL = SQL & "And Data >= " & Format([Dti], "mm/dd/yyyy") SQL = SQL & "< ESPAÇO >And Data <= " & Format([Dtf], "mm/dd/yyyy") SQL = SQL & "< ESPAÇO >Order by data;" Sucesso! Moreschi 12/06/2021 13:50:45 Olá Avelino, como vai? Tenho um formulário onde informo as datas (inicial e final). Quero filtrar os dados da tabela pelo período e também pela variável tipo = 2 ou tipo = 4. Não está funcionando, onde está o meu erro? Dim cr As Recordset Dim SQL As String SQL = "SELECT * FROM CRMcontatosDiversos where Tipo = 2 Or Tipo = 4 " SQL = SQL & "And Data >= " & Format([Dti], "mm/dd/yyyy") SQL = SQL & "And Data <= " & Format([Dtf], "mm/dd/yyyy") SQL = SQL & "Order by data;" Set cr = CurrentDb.OpenRecordset(SQL) Abraços Marcio Melo 09/06/2021 14:45:43 Retornando para deixar meu Depoimento, toda vez que assito aos seus vídeos amplia o meu conhecimento e consigo absorver novos detalhes, já assite a todos mais de duas vezes. Uma empresa que fiz um programa em 2011... época que conheci o usandoaccess e adquiri todo conteúdo e o monta Ribbons me pediu essa semana 08/06/2014 para fazer algo ainda maior, vai ser uma nova empreitada e dessa vez vou montar tudo baseado no conhecimento que adquiri ao longo desses anos. O seu conteúdo esta excepcional e hiper organizado nem precisava vir até o site; sem contar que os vídeos são completos... tenho alguns livros de VBA... nenhum deles se compara com o que você tem de forma tão didática, elaborada em exemplos e com utilitários de extrema importância para um pontapé inicial; mas uma vez pesso permissão para utilizar todo esse conteúdo... Forte abraço! Sou mais Brasil! Avelino Sampaio 28/05/2021 05:31:55 Fabio, obrigado pelo feedback e muito sucesso! Fabio 27/05/2021 10:57:00 Olá Avelino, é incrível mas acabei de descobrir o que estava errado. No campo "DATA VENDA" o espaço entre as palavras era o causador do erro, desculpe incomodar e obrigado pelas suas contribuições. Abraço! Fabio 27/05/2021 10:45:43 Olá Avelino, muito obrigado por suas contribuições, são de grande valia para quem está a procura de algumas soluções. Tenho aqui uma solução sua para filtrar em um formulário continuo por Cliente e Data, por Cliente está tudo ok, porém quando vou preencher o campo data esta dando erro... poderia me ajudar no que está dando este erro? segue código: Option Compare Database Dim x As String Dim j As Byte Dim filtro As String --------------------------------- Private Sub Form_Open(Cancel As Integer) Me!tx2.SetFocus Me.Filter = "" End Sub ------------------------------------ Private Sub tx1_Change() x = Me!tx1.Text j = 0 If Len(Me!tx1.Text & "") > 0 Then j = j + 1 If Len(Me!tx2 & "") > 0 Then j = j + 2 Select Case j Case 0 Me.Filter = "" Me.FilterOn = False Me!tx1.SetFocus Exit Sub Case 1 filtro = "Data Venda Like '*" & Me!tx1.Text & "*'" Case 2 filtro = "NomeFirma Like '*" & Me!tx2 & "*'" Case 3 filtro = "Data Venda Like '*" & Me!tx1.Text & "*' AND NomeFirma Like '*" & Me!tx2 & "*'" End Select Me.Filter = filtro Me.FilterOn = True Me!tx1 = x Me!tx1.SelStart = Len(x & "") End Sub ------------------------------------------------------ Private Sub tx2_Change() j = 0 x = Me!tx2.Text If Len(Me!tx2.Text & "") > 0 Then j = j + 1 If Len(Me!tx1 & "") > 0 Then j = j + 2 Select Case j Case 0 Me.Filter = "" Me.FilterOn = False Me!tx2.SetFocus Exit Sub Case 1 filtro = "NomeFirma Like '*" & Me!tx2.Text & "*'" Case 2 filtro = "Data Venda Like '*" & Me!tx1 & "*'" Case 3 filtro = "NomeFirma Like '*" & Me!tx2.Text & "*' AND Data Venda Like '*" & Me!tx1 & "*'" End Select Me.Filter = filtro Me.FilterOn = True Me!tx2 = x Me!tx2.SelStart = Len(x & "") End Sub --------------------------------------------- Desde já agradeço por sua boa vontade. Abraço! Moreschi 25/05/2021 10:16:58 Grande Avelino! Funcionou perfeitamente. Muito obrigado e abraços Avelino Sampaio 25/05/2021 08:59:57 Moreschi, dim a(10) For i = 1 to 10 a(i)=me("p" & i) next Sucesso! Moreschi 25/05/2021 08:43:26 Olá, tenho 10 caixas de texto num formulário. P1, ..... P10 Gostaria de usar a instrução For next para gravar o conteúdo destas caixas. Como faço para que reconheça o conteúdo? Porque quando faço: For i = 1 to 10 a=P(i) ou a = "P" & (i) não reconhece o valor de cada caixa. Obrigado Augusto 23/05/2021 08:21:00 Utilizo seu exemplo para filtrar com listBox.. com o operador "in" Muito bom.. Excelente.. Gostaria de saber como funcionaria com 3 listaBox de múltiplas seleções ao mesmo tempo. Como colocaria o filtro para abrir o relatório .. Pode ajudar ? Desde já agradeço .. Parabéns pelo site .. Avelino Sampaio 21/05/2021 07:09:11 Fábio, Seu formulário e acoplado ou desacoplado dos registros ? Se for acoplado, pode utilizar no evento "ao abrir" a propriedade FILTER. Exemplo: me.filter = "NomeDoCampo =" & Dmin("NomeDocampo","NomeDatabela") me.filterOn = True Sucesso! Avelino Sampaio 21/05/2021 05:12:46 Wanderley, Quais os nomes dos campos que vc usa no seu cadastro ? A sua cambo tem quantas colunas e quais os nomes dos campos, em sequência, destas colunas ? No aguardo Fábio 20/05/2021 10:27:31 Gostaria de saber como abrir o formulário que me apresente somento o menor valor de um conjunto de registros Wanderley 18/05/2021 15:40:53 Olá, não estou conseguindo filtrar os nomes para meu banco de dados de clientes. Gostaria de saber quais são as palavras variáveis e onde devem ser colocadas para o filtro funcionar. Já tentei de todas as formas e não deu certo. Private Sub cboConsulta_AfterUpdate() DoCmd.ApplyFilter , "idcliente = " & Me!cboConsulta.Column(0) Me!cli_Nome.SetFocus Me!cboConsulta = Null End Sub Estevão 13/05/2021 06:30:27 Adoro criar macros com botões para abrir planilha presciso de mais conhecimento OBRIGADO Fábio Santana 08/05/2021 18:16:18 Mestre Avelino, você é o cara! Deu certinho. Juntamente com seu código percebi um erro de nome de parâmetro. Alterei a tabela matriz ÁreaDeAtividade e não alterei a outra tabela que era alimentada por esta, que deveria ter o mesmo nome. Por isso o relatório não encontrava o campo. Mas suas proposições foram providenciais! Obrigado pela ajuda e continue sempre ajudando os outros pois tudo isso volta pra vc! Avelino Sampaio 08/05/2021 08:24:51 Fabio, experimente assim: Dim filtro As String filtro = "" If Not IsNull(me!cboCargo) Then filtro = filtro & "Cargo LIKE '*" & me!cboCargo & "*'" If Not IsNull(me!cboAreaDeAtividade) Then filtro = filtro & " AND ÁreaDeAtividad LIKE '*" & Me!cboAreaDeAtividade & "*'" If InStr(filtro, "AND") = 2 Then filtro = Mid(filtro, 6) DoCmd.OpenReport "RelCargo", acViewPreview, , FILTRO Sucesso! Fábio Santana 06/05/2021 16:09:40 Boa tarde Avelino, Primeiro, parabéns pela aula e explicações! Difícil ter um programador tão didático! Estou com um problema e não consigo resolvê-lo. Tenho duas caixas de combinação em cascata: Cargo e ÁreaDeAtividade. Quero gerar um relatório proveniente do filtro nas duas caixas, mas o relatório gerado apresenta todas as opções que tenho! Copiei o código de outro exemplo, mas como sou leigo no VB não vi onde estava o erro. O código é o seguinte: Private Sub cmdExibir_click() Dim strFiltro As String strFiltro = "" If Len(cboCargo & "") > 0 Then strFiltro = " and Cargo = '" & cboCargo & "'" If Len(cboAreaDeAtividade & "") > 0 Then strFiltro = strFiltro & " and ÁreaDeAtividade = '" & cboAreaDeAtividade & "'" If Len(strFiltro) > 0 Then strFiltro = Mid(strFiltro, 16) DoCmd.OpenReport "RelCargo", acViewPreview End Sub O relatório deveria me apresentar somente o cargo e área de atividade que desejo, mas não funfa! De antemão agradeço! Alessandro 02/05/2021 18:02:03 Boa tarde, preciso de ajuda, preciso criar no meu formulário um botão que ao clicar vai direcionar para um site e automaticamente concatenar com o nr de CPF para abrir as informações do Cliente, alguém sabe como eu faço isso? Marcos Henrique 28/04/2021 17:35:29 Olá! Avelino, estou criando um formulário para cadastro de viagens e nele existe os campos "nº_Ordem_de_Serviço" e "Nome_do_Viajante" entre outros. Quero Colocar uma crítica ao salvar. Quero que saber se o "nº_Ordem_de_Serviço" é o mesmo que foi criado para o "Nome_do_Viajante" na tabela "Ordem_de_Serviço" antes de salvar os dados na tabela "Viagem". Se possível gostaria de sua ajuda para saber como fazer esta crítica funcionar. Marcos Oliveira 28/04/2021 12:50:39 Boa Tarde Avelino, Na verdade não quero saber se ele(Devedor) já foi cadastrado, quero saber quantas vezes ele ja foi cadastro. Como seu exemplo acima, gostaria que ao digitar o nome do devedor, o sistema me listasse quantas vezes ele foi cadastrado e tivesse como escolher o cadastro que quero ver. Exemplo, o sistema listou 3 vezes o nome ; Marcos Oliveira - vamos dizer que este devedor deva a 3 clientes diferentes, eu escolheria qual dos débitos eu quero visualizar atraves de dois cliques em cima do nome. pode me ajudar !! Marcos Oliveira 28/04/2021 12:20:58 Boa tarde AVELINO, Preciso saber quantas vezes um devedor foi cadastrado no meu sistema, ou seja, preciso criar uma espécie de passagem do devedor em meu cadastro. Por exemplo, posso ter em meu sistema um mesmo devedor com débitos com diversos clientes. Exemplo; Devedor: Marcos Paulo Silva - CPF. 000.123.456-78 - Vamos dizer que este mesmo devedor deva aos clientes A, B e também o C. – Gostaria que no mesmo momento que eu digitasse o nome do devedor na minha caixa de texto para procura-lo no meu banco de dados, eu recebesse a informação de todos os cadastro do mesmo no sistema,ou seja, se ele foi cadastrado 3 vezes por reter 3 débitos com diferentes clientes , gostaria que me listasse os 3 cadastros feitos para que eu escolhesse qual eu irei cobrar ou acionar. Uma espécie de passagem. Pode me ajudar !!?? Obrigado!! Marcos Oliveira. RMateus 27/04/2021 20:21:58 Excelente trabalho. Necessitava da vossa ajuda para conseguir filtrar um relatório tendo por base os dados de duas Listas ou mais listas diferentes, por favor. Já fiz várias tentativas sem sucesso: Dim filtro As String Dim Sel As Variant Dim j As Boolean filtro = "in(" For Each Sel In Me!Lista.ItemsSelected filtro = filtro & Me!Lista.Column(0, Sel) & "," j = True Next filtro = Mid(filtro, 1, (Len(filtro) - 1)) & ")" filtro = "idfruta " & filtro If j = False Then MsgBox "Selecione uma ou mais frutas...", vbInformation, "Aviso" Me!Lista.SetFocus Me!Lista = 0 Else DoCmd.OpenReport "rltFrutas", acViewPreview, , filtro End If Muito obrigado. Avelino Sampaio 24/04/2021 17:58:12 Eduardo tente assim: forms("nome do formulário")!fcdeq.requery Sucesso! EDUARDO ROCHA 24/04/2021 17:54:08 LEMBRE-SE QUE ESTOU FORA DO FORMULARIO. ISSO QUE É O PROBLEMA. JA FIZ TODAS AS FORMAS DE REFERENCIAS. Avelino Sampaio 24/04/2021 17:25:47 Eduardo, Experimente utilizar o método requery Me!fcdeq.requery Sucesso! EDUARDO ROCHA 24/04/2021 14:41:31 TENHO UM FORM A QUE TEM SUB FORM B QUEM LISTBOX CHAMADO fCDEQ(UMA LISTA DE EQUIPAMENTOS). DENTRO DO SUB EU TENHO UM BOTAO DE INCLUSAO QUE ABRE UM FORM C PARA INCLUIR UM NOVO EQUIPAMENTO; NÃO ESTOU CONS2GUINDO ATUALIZAR A LISTBOX AUTOMATICAMENTE APOS INCLUSÃO. TENHO QUE TECLAR F9 EIDE 23/04/2021 17:43:36 OLA AVELINO O SEU CURSO DE VBA,VAI SER BEM EXPLICADO POR QUE O QUE VEJO POR AI AS EXPLICAÇÕES SÃO MUITO VAGA,TAIS COMO ME! O QUE SIGNIFICA,ME!FRM DUVIDAS SIMPLES COMO ONDE SE ENCAIXA E NOME DO CAMPO OU DO FORMULARIO OU SEJA UM ABAC DO VBA ETC, ABRAÇO SUCESSO. Marcos Sacurae 10/04/2021 11:57:30 Bom dia Avelino, Parabéns pelo seu trabalho, várias vezes entrei no site para tirar minhas dúvidas, mas desta vez preciso de uma ajuda. Tenho um programa que fiz no Access 2007 para controle de compra de peças, tive que fazer uma gambi que não estava nos planos e acabei por encontrar um "erro" que não conseguí entender. O BD tem uma tabela de produtos que tem um campo de categoria, até então não tinha ocorrido o erro por que este campo sempre estava preenchido, mas por causa da gambi e da urgência acabei usando a tabela em uma exportação para planilha do Excel. Bem esta rotina de exportação usa a tabela com um filtro "WHERE categoria <> 'FUNDIDOS'", como a pressa mandou, 70 itens de um total de 372 este campo de categoria estava em branco, resumindo, a exportação só mandou 302 itens e não havia nenhum com categoria FUNDIDOS e sim em branco. Tem alguma idéia do possa ter ocorrido e o que posso estar fazendo para contornar isso? Moreschi 04/04/2021 08:27:18 Bom dia Avelino! Funcionou perfeitamente. Abraços e muito obrigado. Avelino Sampaio 03/04/2021 17:12:24 Moreschi , tente assim: Dim cr As Recordset Dim SQL As String Dim i As Integer Dim SOMA As Double SQL = "SELECT Dados.Codigo, Dados.Descricao, Dados.Peso1, Dados.Peso2, Dados.Peso3, Dados.Peso4, Dados.Peso5 FROM Dados" Set cr = CurrentDb.OpenRecordset(SQL) ' executa a consulta soma =0 For i = 1 To 5 SOMA = SOMA + nz(cr("peso" & i),0) Next i MsgBox SOMA Sucesso! Moreschi 03/04/2021 15:12:23 Olá Avelino, como vai? Um pequeno problema Dim cr As Recordset Dim SQL As String Dim P1, P2, P3, P4, P5 As Double Dim i As Integer Dim SOMA As Double SQL = "SELECT Dados.Codigo, Dados.Descricao, Dados.Peso1, Dados.Peso2, Dados.Peso3, Dados.Peso4, Dados.Peso5 FROM Dados" Set cr = CurrentDb.OpenRecordset(SQL) ' executa a consulta P1 = cr("peso1") P2 = cr("peso2") P3 = cr("peso3") P4 = cr("peso4") P5 = cr("peso5") MsgBox P5 For i = 1 To 5 SOMA = SOMA + ("P" & i) Next i MsgBox SOMA está dando erro na linha SOMA = SOMA + ("P" & i) Thiago 30/03/2021 13:41:50 Tenho um formulário em que várias pessoas atualizam ao mesmo tempo. Eu preciso de saber como fazer para que ninguém acesse o mesmo registro, e que o registro após ser atualizado não apareça mais. Criei um campo FILTRO, em que toda hora que o primeiro campo é preenchido ele recebe o valor X; e uma macro que pega os registros com esse campo nulo. Mas não está dando certo, se você puder me mostrar uma maneira melhor pra fazer isso.... Obrigado ! Luciane 28/03/2021 10:29:42 Criei um formulário com várias opções de cursos, para consultar gostaria de saber como filtrar apenas os cadastro feitos para cada tipo de curso; ou seja, mesmo quando peço apenas de um determinado curso, ele retorna todos os cadastros feitos e demarca com -1 o curso em referencia. Obrigada. Avelino Sampaio 27/03/2021 09:05:23 Thiago, desculpa pois não consegui entender o que deseja. Explique diferente. No aguardo. Thiago 26/03/2021 10:42:49 Gostaria de saber como posso fazer uma macro para filtrar o valor "X", do campo FILTRO na minha tabela MAIN, no formulário. Para que não apareçam mais quando eu o abrir. Obrigado. Priscila 23/03/2021 11:33:01 Avelino, Muito obrigada pela sua ajuda consegui finalizar o projeto, aproveitei e deixei todos as caixas do formulário em código VBA ao invés das macros, aproveito para parabenizar o site que é muito bom Priscila Priscila 23/03/2021 10:18:30 Avelino, Muito obrigada pela ajuda Só mais uma pergunta o relatório deve abrir de modo que eu possa usar os botões de comando que constam nele (Imprimir; Salvar PDF; Sair) Pelo pouco que entendi de VBA, isso está no códido acView...., tentei os que estão disponiveis mas nenhum deles fica dessa forma.. Estou fazendo certo? Priscila Avelino Sampaio 23/03/2021 10:03:01 Priscila , Ops! Vi que também está chamando o relatório no modo Designer. Troque isso para: DoCmd.OpenReport "Rel_Seção",acViewPreview ,,"Seção ='" & Me!Combinação39 & "'" Avelino Sampaio 23/03/2021 09:59:27 Priscila, Por que esta pondo a filtragem no argumento OpenArgs ? Pode então ser este o seu problema de filtragem. Coloque o filtro no argumento WHERE do comando. DoCmd.OpenReport "Rel_Seção", acViewDesign, ,"Seção ='" & Me!Combinação39 & "'" , acDialog Sucesso! Priscila 23/03/2021 09:52:46 Aparece uma caixa de Mensagem do Access com o Setor escolhido em questão: Ex: 01.01.01 Gerenciamento Clico em OK e ele abre o formulário novamente com todos os dados sem os filtros Avelino Sampaio 23/03/2021 09:32:43 Priscila, Acrescente a caixa de mensagem e informe o valor que está retornando. Private Sub Combinação39_AfterUpdate() msgbox Me!Combinação39 DoCmd.OpenReport "Rel_Seção", acViewDesign, , , acDialog, "Seção ='" & Me!Combinação39 & "'" End Sub O campo "Seção" existe no relatório ? No aguardo Priscila 23/03/2021 08:10:48 Pessoal, Gostei muito do site, mas estou tentando resolver um problema e não consigo, Tenho um Formulário chamado "Relatórios por filtros", nele tenho uma caixa de combinação nomeado "Seção" essa caixa (combinação39), está baseada na Tabela "Seção", a mesma deveria trazer o Rel_Seção conforme o item selecionado na cx. de listagem (Combinação39). Deixando dessa maneira: Private Sub Combinação39_AfterUpdate() DoCmd.OpenReport "Rel_Seção", acViewDesign, , , acDialog, "Seção ='" & Me!Combinação39 & "'" End Sub O relatorio abre normalmente, mas com todos os itens da seção e não apenas o que selecionei, Não consigo de maneira alguma realizar o filtro neste formulário, todos os outros consegui realizar via macro, mas esse em qualquer dos casos via VBA ou macro não consigo realizar o filtro neste caso.. Priscila Lucas Brioschi 21/03/2021 12:35:57 Olá Avelino Criei um formulario que associa o cod ao usuario com o comando Nome =[Cod].[Column](1), e funciona bem, seleciona o codigo e ele tras o nome de acordo com a tabela "Codigo e nome" Porem apenas o codigo aparece preenchido na minha tabela. Existem um forma de eu vincular e ambos os campos sairem preenchidos na tabela? Gilmar Ribeiro da Silva 14/03/2021 10:33:54 No exemplo acima: Private Sub Report_Open(Cancel As Integer) Me.filter = "Estado='São Paulo';" Me.filterOn = true End Sub Quando executo este evento num sub relatório, o Access indica inválida esta linha no evento Report_Open. Mudei para o evento Report_Activate, mas ele simplesmente não executa esta linha! Qual a sugestão para aplicar um filtro sum sub relatório? Gabriel Barbosa 12/03/2021 08:56:03 Venho informar que a primeira opção funcionou aqui no trabalho por algum motivo desconhecido ^^ Mas enfim, ela só funcionou no botao de procurar pelo Nome, mas pela matricula nao funcionou, creio que seja pelo tipo de dados, ou estou errado? Sendo a matricula composta totalmente por numeros, basta tirar o apostrofo ('), correto? Agradeço pela sua ajuda, e sucesso pra vc tambem. Gabriel Barbosa 11/03/2021 18:38:23 Incrivelmente, nenhuma das duas opçoes funcionaram =/ Ambas me retornam o mesmo erro abaixo: Erro de sintaxe (operador faltando) na expressao de consulta 'Nome=Ronaldo Dias Ferreira'. Avelino Sampaio 11/03/2021 13:12:50 Gabriel, tente assim: forms!frm_cadastro_avaliacao.RecordSource = StrSQL ou assim: Me.RecordSource = StrSQL Sucesso! Gabriel Barbosa 11/03/2021 11:41:50 Avelino, o access me retorna o mesmo erro, e destaca em amarelo a linha: Me!frm_cadastro_avaliacao.RecordSource = StrSQL Ele afirma que nao pode localizar o campo "frm_cadastro_avaliacao" Avelino Sampaio 11/03/2021 11:37:06 Gabriel, acrescente os apóstrofes na seguinte linha e veja se irá funcionar: StrSQL = "SELECT * FROM tb_motorista WHERE Nome='" & Me!txt_localizar_nome & "';" Sucesso! Gabriel Barbosa 11/03/2021 11:12:35 Avelino, gostei muito de sua materia, e pelo que aprendi e pude implantar no meu sistema, construi o seguinte codigo para procurar um registro atraves de um criterio digitado em uma caixa de texto Private Sub btn_procurar_Click() Dim StrSQL As String StrSQL = "SELECT * FROM tb_motorista WHERE Nome=" & Me!txt_localizar_nome & ";" Me!frm_cadastro_avaliacao.RecordSource = StrSQL End Sub Mas o access me retorna um erro dizendo que o campo "frm_cadastro_avaliacao" nao pode ser localizado, sendo que este "campo" na verdade é um formulario. Poderia me ajudar?? Agradeço desde já. Carlos Bastos 08/03/2021 14:38:04 Parceiro, boa tarde. Mais uma vez obrigado, funcionou como eu queria. Abraços Avelino Sampaio 08/03/2021 05:36:56 Carlos, eu não sei como funciona o mecanismo no VB. No VBA usamos o ponto e virgula para separar as colunas. Exemplo: Me!NomeDaLista.AddItem ("Valor da coluna 0" & ";" & "valor da coluna 1" & ";" & "valor da coluna 2") Experimente algo como: lstFun.items.add(leitura("NomFun") & ";" & leitura("MatFun") & ";" & leitura("SalFun")) Sucesso! Carlos Bastos 07/03/2021 21:50:39 Obrigado pela rapidez em que me respondestes. Avelino eu ja tinha visto esta propriedade , acontece que eu nao sei como concatenar os tres campos ... Eu estou movendo para list dessa forma , ou seja um campo para cada list. LstNome.Items.Add(leitura("NomFun")) LstMat.Items.Add(leitura("MatFun")) LstSal.Items.Add(leitura("SalFun")) Como mover os tres para a mesma list ? Desculpe chatea-lo com essa pergunta que deve ser primária, mas os dois livrpos que comprei de vb nao explicam isso. Tenha uma ótima noite Avelino Sampaio 07/03/2021 15:48:42 Carlos, abra a lista de propriedades da listBox e determine o número de colunas. No caso 3. Pode determinar também a largura de cada coluna. Sucesso! Carlos Bastos 07/03/2021 15:42:31 Primeiramente quero parabeniza-lo pelo site. Avelino estou iniciando no VBNET , trabalho com clipper ha muitos anos e estou estudando o VB. Estou com uma dúvida, como consigo colocar num List Box mais de um campo que tenho no meu Banco Access ? Seria algo como uma consulta , onde eu teria os campos MAT, NOME e IDADE. Até o momento só consigo colocar um campo em cada List Box específica. Antecipadamente agradeço sua atencão. Marco Aurelio 05/03/2021 12:09:51 Obrigado Avelino. Funcionou parcialmente. Quando seleciono o valor null na caixa de combinacao aparece as informacoes referentes ao null e de todos os demais. Abs Avelino Sampaio 05/03/2021 04:24:38 Marco, precisa ter uma idéia de como está aplicando a filtragem. Bom, vc pode testar usando a função NZ() ou a função iif(). Exemplo: nz(forms!NomeFormulário!NomeCombobox;Aqui coloca a filtragem para resultado nulo) ou iif(forms!NomeFormulário!NomeCombobox is null;Aqui coloca a filtragem para resultado nulo;forms!NomeFormulário!NomeCombobox) Se tiver usando a filtragem na consulta origem do relatório, coloque assim: forms!NomeFormulário!NomeCombobox OR forms!NomeFormulário!NomeCombobox is null Sucesso! Marco Aurelio 04/03/2021 20:51:24 Prezados, Estou com um problema. Tenho uma caixa de combinaçao em um formulario que passa como parametro valores (nomes de municipios para ser mais exato). Ao selecionar um dos nomes dos municipios isso dispara uma macro que abre um relatorio com as informaçoes. Tudo funciona, mas quando seleciono um valor null na caixa de combinação as informaçoes nao aparecem. Resumindo, voces podem me ajudar a exibir o relatorio quando o parametro nessa caixa de combinação esta null: Abs Avelino Sampaio 01/03/2021 15:52:31 Daelson, experimente este critério no campo DataExecução: Entre DataSerial(Ano(Data());Mês(Data())-1;26) E DataSerial(Ano(Data());Mês(Data());25) Sucesso! Daelson Rumã0 01/03/2021 08:29:19 Prezados; Bom Dia. Estou criando um BD, e preciso criar um relatório que mostre apenas os dados de um determinado periodo, só que pela consulta não consigo criar o critério necessário. Criei uma consulta onde tem um capo DataExecução, e pretendo filtrar os dados do periodo entre ex.: do dia 26 do mês anterior até o dia 25 do mês atual. Como posso criar esse critério na consulta ou VB relatório, Desde já agradeço a atenção, fico Aguardando retorno. Avelino Sampaio 28/02/2021 08:32:11 Augusto, obrigado pelo feedback e sucesso com o projeto! Augusto 27/02/2021 10:19:24 Olá Avelino .. Consegui resolver a situação ... Utilizei o seu código do Maestro para filtrar o CodColaborador... Mas deixei o filtro das datas direto na consulta.. Parece estar funcionando bem... Obrigado pela ajuda... Suas dicas fazem a gente pensar e recorrer a outras maneiras de solucionar o problema .. Estou no aguardo do seu curso de VBA.. Venho sempre no site recorrer a seus tutoriais e dicas.. Mais uma vez obrigado e parabéns .. Augusto 25/02/2021 23:47:06 Olá AVelino.. A expressão que vc passou dá erro em tempo de execução...(Operador faltando) Minha dúvida é que ainda não sei de que modo o filtro do cod do colaborador(que está num listbox) e do intervalo de datas é transferido para a consulta que é a base do relatório... Quando clico no botão nada é executado ... Estou tentando há algum tempo e não consigo.. Tem como ajudar ??? Desde já agradeço .. Moreschi 24/02/2021 08:39:50 Olá Avelino, Achei a causa. No access 2000, costumo, na criação de um novo programa, usar um modelo já existente deletar tudo e criar o meu programa em cima. Ao fazer isto no access 2007 deu o problema. Refiz o programa usando um banco de dados vazio e tudo funcionou. Só não entendo por que os eventos não funcionam quando se faz um programa em cima de um modelo no access 2007. Abraços e obrigado. Avelino Sampaio 23/02/2021 06:50:08 Sérgio, baixe o aplicativo Maestro oferecido no artigo. O BD tem exemplos que atende a sua dúvida. Use o Between para selecionar um periodo Algo assim: me.filter = "Datapagamento between #" & format(me!DataInicial,"mm/dd/yyyy") & "# AND #" & format(me!DataFinal,"mm/dd/yyyy") & "#)" me.filteron = true Bom estudo! Avelino Sampaio 23/02/2021 06:43:46 Augusto, tire os critérios da consulta e use as filtragens direto no comando de chamada do relatório. Algo assim: filtro= "(periodo between #" & format(me!DataInicio,"mm/dd/yyyy") & "# AND #" & format(me!DataFinal,"mm/dd/yyyy") " filtro = filtro & "#) AND (Cod IN(" & me!SeqCod & "))" docmd.OpenReport "NomeRelatório",acViewPreview , , filtro Sucesso! sergio 22/02/2021 16:13:29 Olá Avelino... Gostaria que me ajudasse: Tenho um formulário, tipo contínuo, e dois campos para data (data_inicial) e data (final), preciso criar um botão que, ao clicar, liste no próprio formulário contínuo, o período entre as datas que preenchi nos campos (data_inicial) e (data_final) Aguardo seu tempo e atenção. Abraços Augusto 22/02/2021 09:22:10 Olá Avelino.. Mais uma vez recorro ao seu conhecimento.. Estou tentando adaptar um filtro com seleções múltiplas de uma caixa de listagem para gerar um relatório do seu Maestro. No seu exemplo o relatório é baseado numa tabela. No meu caso o meu relatório é baseado numa consulta e existem 2 critérios: o período e o cod colaborador (o que vou buscar na caixa de listagem). Tentei várias vezes mas sempre que executo o relatório ele me pede o código do colaborador. Acho que não estou conseguindo passar o que seleciono na caixa de listagem para o critério da consulta. Como faço isso? Tem como ajudar ? Moreschi 20/02/2021 15:52:47 Olá Avelino, tudo bem? Fiz o que você falou, mas não deu certo. O combobox só funciona se estiver ligado a uma consulta ou tabela. Abraços Avelino Sampaio 17/02/2021 05:26:42 Moreschi, Troque o nome da variável de SQL para strSQL Imagino que o controle ProdutoVe seja uma combobox ou um listbox. Reveja suas propriedade, como por exemplo o número de colunas e a propriedade "tipo da linha de origem" se está para TABELA/CONSULTA. Sucesso! Moreschi 16/02/2021 19:23:29 Olá Avelino, como vai? Estou usando o access 2007 e só aparece vazio ao receber o foco. (No access 2000 funciona bem) Dim SQL As String SQL = "SELECT Produtos.CodigoPD, Produtos.NomePD, Produtos.PrecoDeVendaPD, Produtos.UnidadeVPD" SQL = SQL & " FROM Produtos" SQL = SQL & " ORDER BY Produtos.CodigoPD;" Me!ProdutoVe.RowSource = SQL Onde estou errando? Abraços Avelino Sampaio 14/02/2021 08:15:05 Marcos, é possível fazer sim mas preciso que me envie um BD exemplo ou imagem da sua consulta ou código que esta usando para que eu possa analisar. Entre em contato pelo meu email: avelino(arroba)usandoaccess(ponto)com(ponto)br Marcos Aurélio 14/02/2021 00:09:32 Primeiramente quero parabenizar pela iniciativa, muito bom o site os conteúdos maravilhosos e as video aulas show de bola... Queria muita uma ajuda, eu não estou conseguindo fazer uma pesquisa como critério um combo.cliente por intervalo entre datas, como no exemplo maestro filtros, essa consulta a origem de dados vem de uma outra consulta e não de uma tabela. É possivel fazer? Queria muito sua ajuda. Giorgio 10/02/2021 18:21:21 Avelino tudo bem! Poderia mostrar melhor a (Pesquisa que filtra por caracteres) em SQL usando o Access? Misael Ferreira 09/02/2021 01:22:49 Quero fazer um filtro para imprimir relatório, já coloquei critério na consulta, porém, quero filtrar só um campo ou mais de um. Quando coloco o critério na consulta só para um campo da certo, ou para todos os campos, porém quando quero filtrar só 3 campos dos 10 existentes aí o relatório não traz nada. Agradeço se alguém poder me ajudar. Meu e-mail:Iscar@dana.com Obrigado! MARCIO MELO - RJ 08/02/2021 18:32:24 Muito show esse procedimento de filtragem, passei usar em algumas parte dos meus bd's, gostei muito, prático e eficiente e não sobrecarrega o formulário, esse tipo de artigos são muito importantes, sensacional rsrs... Sou mais Brasil! Jordão Filho 05/02/2021 10:01:38 É possível criar uma Macro que não permita que o usuário edite uma determinada linha da planilha após ele digitar "Ok" em uma célula ? Ícaro Ferraz 03/02/2021 18:53:50 Avelino boa tarde! Tenho em um form. uma caixa de listagem onde existe o campo "Data de Vencimento" e gostaria realizar um filtro entre datas, é possível? Poderia me ajudar? Desde de já agradeço. Giorgio 29/01/2021 09:12:04 Avelino bom dia! Você tem a vídeo-aula que ensina como fazer aquela pesquisa que filtra por caracteres, mostrando os resultados no quadro abaixo? Estou usando o Access 2010, tentei fazer varias vezes mas nada deu certo. Este tipo de pesquisa que você mostrou, no minha experiência, é a melhor pesquisa para uso em aplicativos de uso rápido de acesso. Pesquisa nota 10. Eu estou querendo usar esta pesquisa em um aplicativo Access, com a possibilidade de pegar a linha selecionada abaixo, exibindo os dados no formulário. Poderia me ajudar? Manoel 28/01/2021 11:58:24 Avelino... Boa tarde!!! Adquiri material do Usando Access, por sinal, bem didático, ótimos exemplos onde procuro aperfeiçoamento no uso desta ferramenta. Apesar do esforço encontrei uma dificuldade em extrair dados através da Consulta, a qual peço o vosso apoio. BD Doc Data Valor 390722 25/02/2013 R$ 369.515,59 390722 25/03/2013 R$ 366.391,85 390722 25/04/2013 R$ 363.928,47 390722 25/05/2013 R$ 337.620,68 390722 25/06/2013 R$ 322.889,82 390722 25/07/2013 R$ 343.000,13 390722 04/08/2013 R$ 116.289,98 399183 25/05/2013 R$ 6.499,61 399183 25/06/2013 R$ 13.682,13 399183 25/07/2013 R$ 187.687,70 399183 25/08/2013 R$ 316.650,24 399183 25/09/2013 R$ 147.712,05 399183 28/11/2013 R$ 195.642,91 399308 25/05/2013 R$ 15.107,84 399308 25/06/2013 R$ 14.002,08 399308 25/07/2013 R$ 13.463,52 399308 25/08/2013 R$ 15.302,80 399308 25/09/2013 R$ 12.579,92 399924 25/07/2013 R$ 88.941,55 399924 25/08/2013 R$ 85.063,95 399924 25/09/2013 R$ 85.063,95 399924 25/10/2013 R$ 85.063,95 399924 25/11/2013 R$ 85.063,95 399924 25/12/2013 R$ 85.063,95 Destes dados preciso extrair a média dos valores das três maiores datas de cada documento. e-mail: mrabade@uol.com.br Avelino Sampaio 22/01/2021 17:13:55 Dorival, baixe o aplicativo exemplo Maestro da seção downloads do meu site Entre no modo estrutura do Maestro, mantendo pressionada a tecla SHIFT na inicialização. Estude o formulário frmListaRelatórios Bom estudo! Dorival de Oliveira 22/01/2021 16:55:54 Avelino, boa tarde! Por favor preciso de sua ajuda. Tenho um cadastro de membros da igreja, onde criei um combo para mostrar todos relatório criados. Então preciso que ao selecionar um dos relatórios o mesmo seja visualizado para impressão. Me ajude por favor. Meu contato: dorival_de_oliveira2050@yahoo.com.br Giorgio 21/01/2021 11:10:47 Avelino Gostei muito da sua Didática, sua explicações são excelentes. Tenho um caso em Access, que preciso usar aquela pesquisa por caracter que você mostrou no vídeo. Vou tentar fazer com as suas aulas disponíveis aqui! Estou com dúvida de como selecionar/pegar umas das linhas pesquisadas e mostrar o registro no formulário atual? Qualquer dúvida, foi pedir sua ajuda MESTRE!!! Avelino Sampaio 18/01/2021 08:37:19 Camilo, é possível sim! Tem um exemplo no Maestro que seleciona itens de uma listaBox e usa o operador IN() na filtragem. É este operador que vc deve usar. Investigue no exemplo como montar o filtro. O resultado do código para filtragem deve ter uma semelhança com estas linhas abaixo: me!NomeDoControleSubformulário.form.Filter = "idMercadoria in(1,7,208,67)" me!NomeDoControleSubformulário.form.FilterOn = true Sucesso! Avelino Sampaio 18/01/2021 08:29:53 Pedro Trindade, tem como me eniviar um exemplo (zipado) para que possa analisar este seu caso. meu email: avelino(arroba)usandoaccess(ponto)com(ponto)br Aguardo Avelino Sampaio 18/01/2021 07:10:31 Nelinho, Monte o seu relatório sem qualquer filtragem. Estando montado e funcionando, vc então aplicará a filtragem através do botão que chama pelo relatório. Exemplo: docmd.OpenReport "NomeDoRelatório",acViewPreview ,,"NomeDoCampo ='" & me!NomeCampoPesquisa & "'" Sucesso! Avelino Sampaio 18/01/2021 07:07:58 Marcos, Vá na seção CONTATO e me passe seu email que lhe enviarei um exemplo. No aguardo Nelinho 17/01/2021 16:20:33 Boa Tarde Amigos estou com um problema de principiante estou tentando obter uma informação em uma tabela que está vinculada no Access 2007 vinculada ao OBDC na maquina que eu trabalho eu tenho acesso as tabelas consigo visualizar consigo buscar os dados necessários para as necessidades do Diretor do Hospital mais quando vou criar um campo para fazer uma pesquisar e da pesquisar gerar um relatório não consigo. E nesta tabela eu não posso editar os dados só pesquisar e visualizar os seus dados. Esta minha tabela os dados que eu preciso para a pesquisar, que são dois modos e resulta em uma grid trazendo os dados referente ao solicitado. O que fazer estou precisando muito da ajudada do amigo do amigo você pode mim ajudar? Estou com o prazo vencido preciso destas informações o mais urgente possível, obrigado a todos. Meu email nelinhor@hotmail.com Atenciosamente, Marcos Oliveira 17/01/2021 16:16:47 Olá Avelino, Como coloco um "botão de alternancia" para rodar. Tenho a necessidade de saber quando uma conta foi cancelada ou esta ativa. gostaria de colocar um botão de alternancia com cores diferentes tipo; ativo(VERDE) - cancelado(VERMELHO) e gostaria que esta informação ficasse gravado nos status de cada cliente meu individualmente. Pode me ajudar !!!???? Muito obrigado !!! Camilo 17/01/2021 15:29:51 Boa tarde Avelino. Tenho uma dúvida: tenho um formulário que apresenta uma caixa de listagem e um subformulário (contínuo). Na caixa de listagem, tenho uma relação de mercadorias onde eu gostaria de selecionar quais que realmente preciso. Após gostaria que ela filtrasse meu subformulário contínuo, selecionando apenas os registros em destaque na caixa de listagem. Isso é possível? Avelino Sampaio 17/01/2021 09:59:50 Atila, crie um BD exemplo com os 3 grupos mais o relatório e envie para o meu email (zipado), para eu montar o modelo de filtragem. meu email: avelino(arroba)usandoaccess(ponto)com(ponto)br No aguardo Atila Brasil 16/01/2021 17:51:07 Boa tarde Avelino! Pretendo abrir um relatório já filtrado a partir de critérios definidos em 3 grupos de opção que estão num formulário, pesquisei em diversos fóruns e sites, contudo não encontrei um modelo ou um exemplo no qual eu conseguisse entender e aplicar ao meu bd de contas a pagar. Como proceder? Muito obrigado Atila Brasil 16/01/2021 17:39:57 Boa tarde Avelino! Realmente os filtros do BD Maestro e seu video-aula sobre filtros ~foram muito bem produzidos. Parabéns! Avelino Sampaio 16/01/2021 08:54:09 Paulo, crie um atalho para rodar o aplicativo em questão. Se ainda assim pelo atalho não abrir, acrescente a linha de chamada do atalho o "/runtime". exemplo: DESTINO: C:\Maestro\Maestro_v2.accdr /runtime Sucesso! Pedro Trindade 15/01/2021 09:55:33 Avelino, Bom dia Criei um filtro conforme exemplo: Private Sub cboConsulta_AfterUpdate() DoCmd.ApplyFilter , "idcliente = " & Me!cboConsulta.Column(0) Me!cli_Nome.SetFocus Me!cboConsulta = Null End Sub Ele funciona bem. Entretant, ele está filtrando, também os subformulários dos registros. Está retornando os subformularios vazios, como se não houvesse registros nos subformularios. Tem solução? Obrigado Paulo_CWB 12/01/2021 23:17:01 Boa noite Avelino, Esqueci de agradecer a ajuda e avisar que realmente funcionou após sua sugestão de acrescentar a senha no comando de abertura. Uma outra dúvida agora: Instalei eu uma máquina para rodar via Access Runtime. Tenteui rodar o arquivo .ACCBE ou ACCDR, mas não vai. Com access runtime, só roda o .ACCDB. Pelo menos nessa maquina que testei. (runtime do 2010). Alguma sugestão? Obrigado. Renner 10/01/2021 15:30:49 Consegui Avelino.... Fiz assim: DoCmd.OpenReport "Cracha",acViewPreview ,,"registro IN(" & Me.cxregistro & ")" Muito obrigado pela ajuda, já fazia tempo que estava procurando uma maneira de fazer isso mas ninguém tinha comentado sobre o operador IN. Mais uma vez, muito obrigado!!! Avelino Sampaio 10/01/2021 13:23:34 Renner, estude sobre o operador IN. Exemplo: Docmd.OpenReport "NomeRelatório", acViewPreview , ,idFuncionario in (123,553,372) Acesse meu tutorial sobre "programação de relatórios" e baixe o arquivo exemplo. Tem um exemplo que tem uma lista de frutas e usa o operador IN para imprimir o selecionado. Sucesso! Renner 10/01/2021 12:20:22 Olá Avelino, meus parabéns pelo site!!! Tenho um BD onde controlo as autorizações para dirigir dos meus funcionarios, nele após preecher todos os dados eu imprimo a "autorização" como se fosse um crachá. Porém, só consigo imprimir um por vez ou todos de uma vez. Gostaria de saber se existe um metodo onde eu possa imprimir os crachás dos funcionários que desejo Ex. 123, 553, 372 Conto com seu apoio. Avelino Sampaio 09/01/2021 13:05:30 Paulo, Acrescente a senha no comando de abertura do BD. Set dbs = OpenDatabase("J:\1Tcc\##1_TR\CALC_be.accdb", False, False, ";PWD=senhaDoBd") Sucesso! Paulo_CWB 09/01/2021 11:03:07 Bom dia, Por muitos anos usei Access 97. Atualmente, estou fazendo um novo aplicativo em Access 2010. Uso back-end com senha para as tabelas e front-end para as interfaces. Em meu computador em casa, uma consulta SQL no OpenRecordset funcionou perfeitamente. Já no PC da empresa, apresenta o problema de "senha inválida", erro 3101. O restente do aplicativo funciona OK tanto em casa quanto no trabalho, acessando o banco, etc. Sempre usei essa configuração. Mas, nessa consulta SQL do Access 2010, tá dando esse erro. Alguma sugestão? Set dbs = OpenDatabase("J:\1Tcc\##1_TR\CALC_be.accdb") Set rst = dbs.OpenRecordset("select KEY_WIRE_CO, DIAM_WIRE_CO, PRICE_WIRE_CO from WIRE_CO " _ & "where KEY_WIRE_CO = " & DP1_COMBO & ";") Agradeço. Tico 09/01/2021 10:13:39 Caro Avelino.... Tenho em um formulario uma caixa de texto "quantidade" e outra valor_individual (este formulário é de tabela origem "TB_dados" . no formulário em consigo "displayar" a multiplicação da quantidade pelo valor_individual, ambos geram um valor_total. Agora que são elas!!! Como faço para que este valor_total seja armazenado na TB_dados ou se for o caso em outra tabela. desde já obrigado. Mauiricio 08/01/2021 13:06:30 Avelino, bom dia Tenho uma tabela que tem um campo de nome DATA e necessito criar a query select capturando o intervalo de datas deste campo Uso um form de uma tabela DataPeriodo e tem duas caixas de Texto destes campos Data Inicial (name DataInicial) e Data Final (name DataFinal) mas não consigo vincular Usei este código abaixo no form mas acho que nao estou associando a criação da query com o resultado abs Private Sub cmdPesq_Click() Dim strSql As String Dim filtro As Variant DoCmd.OpenTable "01-Movimento-diario" filtro = "Between #" & Format(Me!DataInicial, "dd/mm/yyyy") & "# AND #" & Format(Me!DataFinal, "dd/mm/yyyy") strSql = "SELECT * FROM 01-Movimento-diario WHERE DATA " & filtro & "#;" End Sub Avelino Sampaio 04/01/2021 08:36:33 Ricardo, não tenho uma previsão para o curso do VBA mas estou lutando muito para que sai em breve. Sucesso! Ricardo 03/01/2021 12:11:45 Olá, O seu site é muito bom. Para quando as Video-Aulas de VBA? Como impedir a adição de um novo registro sob as condições abaixo? 02/01/2021 19:04:01 Olá Avelino, boa tarde. Amigão, não se trata de impedir um novo registro caso o paciente já tenha sido cadastrado e sim que a data da internação não esteja entre as datas de uma possível internação numa outra unidade de internação. Assim, utilizei o seguinte código: No evento antes de atualizar do campo Internação (tipo Data/Hura): Private Sub Internação_BeforeUpdate(Cancel As Integer) On Error GoTo TrataErro Dim DB As DAO.Database, RST As DAO.Recordset Dim SQL As String, X, Reg As Integer Set DB = CurrentDb() SQL = "Select * From qryPacientes where Pront =" & Forms!frmMovimento!frmPacientes!Pront ' Por tratar-se de um subform do Form_frmPacientes Set RST = DB.OpenRecordset(SQL) Reg = Me.RecordsetClone.RecordCount() 'Total de registros RST.MoveFirst ' Vou para o primeiro registro For X = 1 To Reg With RST If Not .EOF Then If Me.Internação >= RST!Internação And Me.Internação < RST!Saída Then MsgBox "Atenção:" & Chr(13) & "O prontuário nº " & Format(Me.Pront, "000,000") & " de " & Me.Paciente & " já consta como internado na Unidade " & Chr(13) & RST!Unidades & " no período entre " & RST!Internação & " e " & RST!Saída & ". ", vbCritical, " InfoBasic Smart System" Me.Undo ' Desfaz o registro End If .MoveNext End If End With Next X RST.Close DB.Close TrataErro: 'MsgBox "Form_frmPacientes - Internação_BeforeUpdate" & vbCrLf & err.Description, vbExclamation + vbOKOnly, "Erro: " & CStr(err.Number) #If DESENV Then Stop Resume #End If End Sub Abraços, WSenna Avelino Sampaio 02/01/2021 11:04:53 Wagner, para impedir adição de registro sob certas condições, veja o artigo "Como saber se o cliente foi cadastrado" na seção dicas aqui do site. Bom estudo! Avelino Sampaio 02/01/2021 10:59:37 Daniela, experimente usando o Colchete: sql = "SELECT NomeCompleto, Cargo, Aniversário FROM [BD Cadastro$] WHERE month([Aniversário])=month(Date)" Sucesso! Luciano Andrade 30/11/2020 22:32:01 Obrigado Avelino, vou fazer as devidas modificações! :) Juan 30/11/2020 16:15:04 Olá Avelino, Como faria no "frmFiltraFormContinuo", ao dá um duplo clique sobre um registro ele passe os dados de uma coluna para um campo em um form que já está aberto? desde já agradeço. Avelino Sampaio 30/11/2020 05:56:50 Luciano, quando se utiliza valores do tipo string na filtragem é obrigatório o uso do apóstrofe. Exemplo: DoCmd.OpenForm "frmAlteraDados3", , , "txtNome = '" & Me!cxLista.Column(1) & "'" Sucesso! Luciano Andrade 29/11/2020 01:53:46 Olá Avelino, Com relação ao trecho de código, onde você mostrou como abrir um formulário ao dar um duplo click em um pedido numa caixa de listagem: Private Sub Lista_DblClick(Cancel As Integer) Docmd.OpenForm "frmPedidos",,,"NumeroPedido = " & Me!Lista.column(1) End Sub Há mais alguma coisa a ser feita no formulário que irá se abrir? Pois criei um form com campos para alteração de dados de uma tabela. Quando tento chamar este mesmo formulário por outro form usando a linha: DoCmd.OpenForm "frmAlteraDados3", , , "txtNome = " & Me!cxLista.Column(1) Recebo uma mensagem do access dizendo que está faltando argumentos nesta mesma linha. No access o trecho de código que estou usando é este: Private Sub cxLista_DblClick(Cancel As Integer) If Not IsNull(Me.cxLista) Then DoCmd.OpenForm "frmAlteraDados3", , , "txtNome = " & Me!cxLista.Column(1) End If End Sub Se puder me dar uma luz, ficaria muito grato, e desde de já obrigado pela atenção! Marcelo David 23/08/2020 01:21:39 Olá, Avelino, este artigo está demais!! Parabéns Avelino Sampaio 01/08/2020 05:13:16 Então amigo Ivan, esta faltando vc montar os "Cases" 4 e 5 Ivan Allessi 31/07/2020 13:48:40 Fiz a Mudança, funcionou apenas se preencher os tres campos ai ele filtra tudo certo, mais se eu quiser só preencher o campo Processo e Data ou Data e Vendedor ai não funciona. Avelino Sampaio 31/07/2020 11:15:29 Ivan, A combinação dos três campos para filtragem o case é 6(1+2+3) e não 4 Case 6 filtro = "Processo like '*" & Me!tx1 & "*' AND Data like '*" & Me!tx.Text & "*'AND Vendedor like '*" & Me!tx2 & "*'" CASE 4 e CASE 5 seria para o uso simultânea de dois campos. Sucesso! IVAN ALLESSI 31/07/2020 10:07:57 Boa tarde Avelino, Quero Filtrar usando os campos "Processo", "Data", e "Vendedor" juntos, mais na data não esta dando resultado nenhum, Se eu colocar um Valor no Campo "Processo" e no "Vendedor" ele filtra tudo certinho, mais se eu colocar a data não funciona. Quando eu coloco só a data ai ele filtra.(Tanto faz pelo Ano, Mês, Dia, ele retorna filtrando os registros tudo certinho) Meu problema é que se eu colocar os valores nos 3 campos não filtra nada, Já tentei de varias formas e nã consigo resolver, acho que é um problema na escrita da função, já quebrei a cabeça um monte. Abaixo segue o código, se puderes me ajudar agradeço. Option Compare Database Dim j As Byte Dim filtroLista As String Private Sub fncCarregalista(Optional filtro As String, Optional ordem As String) Dim strSql As String strSql = "SELECT Código, Processo, Data, Codigo, Cliente, Zona, Vendedor, Valor, Motivo" strSql = strSql & " FROM GarantiaDevolucao WHERE " & filtro strSql = strSql & " ORDER BY Data;" Me!Lista.RowSource = strSql filtroLista = filtro End Sub ---------------------------------------------------------------------------------- Private Sub tx_Change() Dim filtro As String j = 0 If Len(Me!tx.Text & "") > 0 Then j = j + 1 If Len(Me!tx1 & "") > 0 Then j = j + 2 If Len(Me!tx2 & "") > 0 Then j = j + 3 Select Case j Case 0 filtro = "Código > 0" Case 1 filtro = "Data like '*" & Me!tx.Text & "*'" Case 2 filtro = "Processo like '*" & Me!tx1 & "*'" Case 3 filtro = "Vendedor like *" & Me!tx2 & "*" Case 4 filtro = "Processo like '*" & Me!tx1 & "*' AND Data like '*" & Me!tx.Text & "*'AND Vendedor like '*" & Me!tx2 & "*'" End Select Call fncCarregalista(filtro) End Sub Private Sub tx1_Change() Dim filtro As String j = 0 If Len(Me!tx1.Text & "") > 0 Then j = j + 1 If Len(Me!tx & "") > 0 Then j = j + 2 If Len(Me!tx2 & "") > 0 Then j = j + 3 Select Case j Case 0 filtro = "Código > 0" Case 1 filtro = "Processo like '*" & Me!tx1.Text & "*'" Case 2 filtro = "Data like *" & Me!tx & "*" Case 3 filtro = "Vendedor like *" & Me!tx2 & "*" Case 4 filtro = "Processo like '*" & Me!tx1.Text & "*' AND Data like '*" & Me!tx & "*'AND Vendedor like '*" & Me!tx2 & "*'" End Select Call fncCarregalista(filtro) End Sub Private Sub tx2_Change() Dim filtro As String j = 0 If Len(Me!tx2.Text & "") > 0 Then j = j + 1 If Len(Me!tx & "") > 0 Then j = j + 2 If Len(Me!tx1 & "") > 0 Then j = j + 3 Select Case j Case 0 filtro = "Código > 0" Case 1 filtro = "Processo like '*" & Me!tx1.Text & "*'" Case 2 filtro = "Data like *" & Me!tx & "*" Case 3 filtro = "Vendedor like *" & Me!tx2 & "*" Case 4 filtro = "Processo like '*" & Me!tx1 & "*' AND Data like '*" & Me!tx & "*' AND Vendedor like '*" & Me!tx2.Text & "*'" End Select Call fncCarregalista(filtro) End Sub Avelino Sampaio 21/07/2020 06:50:12 Adilson Esta sua função funciona aqui comigo. Da versão 2003 em diante o VBA do Access vem desabilitado. Para que o código funcione é necessário então desabiltar a macro de segurança. Vc fez isso ? Qual é a versão do seu Access ? Adilson Calixto dos Santos 20/07/2020 18:03:43 TENHO A SEGUINTE FUNÇÃO NO ACCESS PARA CALCULAR A IDADE DE UM CANDIDATO, SÓ QUE MEU BD ESTÁ EM SERVIDOR DE REDE E EXECUTO O BD NO CLIENTE, DESENVOLVENDO O BD. A SEGUINTE FUNÇÃO CALCULAVA A IDADE DO CANDIDATO NORMALMENTE E CORRETAMENTE, SÓ QUE PASSEI O BD PARA O SERVIDOR E FICO DESENVOLVENDO DO PC CLIENTE. AGORA QUE ESTOU MANIPULANDO O BD DO LADO DO CLIENTE ELE NÃO CALCULA MAIS A IDADE. O QUE FAÇO. PODEM ME AJUDAR. Public Function IdadeAnos(valor1 As Date, valor2 As Date) As Long IdadeAnos = DateDiff("yyyy", valor1, valor2) If Format(valor1, "mmdd") > Format(valor2, "mmdd") Then IdadeAnos = IdadeAnos - 1 End If End Function Juan 05/07/2020 16:57:54 Avelino, Muito Obrigado pelos seus ensinamentos. Você é Show! ainda não tinha aprimorado meu sisteminha com essas ferramentas por achar que era coisa de outro mundo. Excelente Material. Avelino Sampaio 01/06/2020 03:45:56 Ivan, é perfeitamente possível montar essa programação. Só não ficou claro se vc está querendo descartar a abertura de um outro formulário, ou seja, usar o próprior formulário de clientes para inclusão do novos clientes. Entre em contato, através da seção contato do site, e me esclareça melhor, para eu te oferecer uma solução. No aguardo Ivan Allessi 31/05/2020 21:13:50 Boa noite Avelino, Tenho um formulario com dados de clientes, alguns campos são bloqueados e o usuario não pode fazer alterações neles, porem quando o usuario vai cadastrar um novo cliente, abre-se um um outro formulario para entrada de dados. Gostaria de saber o seguinte: Se posso bloquear esses campos para alteração via código, e libera-los quando o usuario clicar no botão NOVO CLIENTE (inserir um novo registro) para que ele possa fazer a entrada de dados no mesmo formulario? Desde já agradeço. Luis Antonio 30/04/2020 01:52:12 Gostaria de compatilhar com vocês um sistema que criei inspirado nesta aula. Trata-se de um sistema de filtragem comandado por dois botões de alternância. Quando eu clico no botao1 se filtra por um critério, ao clicar no botão2 se filtra por outro critério. Um botão quando marcado desmarca o outro. Private Sub Botao2_Click() If Me.Botao2 = True Then Me.Filter = "CD4_CV=yes" Me.Botao = False Me.FilterOn = True ElseIf Me.Botao2 = False Then Me.Filter = "CD4_CV=yes" Me.Botao = True Me.FilterOn = False End If End Sub Private Sub Botao_Click() If Me.Botao = True Then Me.Filter = "CVCriaExposta=yes" Me.Botao2 = False Me.FilterOn = True ElseIf Me.Botao = False Then Me.Filter = "CVCriaExposta=yes" Me.Botao2 = True Me.FilterOn = False End If End Sub Johnny Cardoso 25/04/2020 11:38:02 Avelino, quero partilhar com você e demais programadores uma implementação que fiz em meu sistema: ComboBox com Evento para filtrar um caractere ou um conjunto de caracteres em um consulta SQL. ' Descrição da Função: ' Carregar dados de tabela na combo e filtrar conforme digita na combo ' Filtra por junção de caracteres, retornando todos + conjunto já digitado + todos ' Se tiver Johnny, carlos e elton John na lista, ao digitar joh, retornará o primeiro e último registro. ' Filtra por radical da lista --------------- No seu formulário, crie uma Combobox com nome Combo0 ou outro qualquer. Lembre-se de alterar nos eventos Em propriedades, configure o tipo de origem da linha para Tabela/Consulta e a Origem da linha como: SELECT Tabela.cd_cliente, Tabela.nm_cliente FROM Tabela ORDER BY Tabela.nm_cliente; Nota: A ordem de classificação fica a critério seu. ------------------------------- No evento da combo0, Ao alterar (change) insira o código abaixo: Private Sub Combo0_Change() ' Descrição da Função: ' Carregar dados de tabela na combo e filtrar conforme digita na combo ' Filtra por junção de caracteres, retornando todos + conjunto já digitado + todos ' Se tiver Johnny, carlos e elton John na lista, ao digitar joh, retornará o primeiro e último registro. ' Filtra por radical da lista Dim strText, strFind, strFind2 ' strText-Retorna o valor da Combo ' strFind-Retorna o valor do conjunto já digitado ' strFind2-Junta a clausula WHERE ao valor do conjunto já digitado strText = Me.Combo0.Text If Len(Trim(strText)) > 0 Then ' Mostra a lista com os registro que contenham o conjunto já digitado ' Cria uma expressão de consulta SQL com string para clausula WHERE do SQL que retorna os dados da tabela strFind2 = "nm_cliente Like '*" For I = 1 To Len(Trim(strText)) If (Right(strFind, 1) = "*") Then strFind = Left(strFind, Len(strFind) - 1) End If strFind = strFind & Mid(strText, I, 1) & "*" Next strFind2 = strFind2 & strFind & "'" strsql = "SELECT Tabela.cd_cliente, Tabela.nm_cliente FROM Tabela where " & strFind2 & " ORDER BY Tabela.nm_cliente;" ' Filter os registros da combo list utilizando a nova consulta sql Me.Combo0.RowSource = strsql Else ' Senão, mostra a lista com todos os registros strsql = "SELECT Tabela.cd_cliente, Tabela.nm_cliente FROM Tabela ORDER BY Tabela.nm_cliente; " Me.Combo0.RowSource = strsql End If ' Abre a lista do combobox para mostrar os registros filtrados Me.Combo0.Dropdown End Sub NOTA: Este procedimento apenas está filtrando os registros. Para utilizar esses dados filtrados para carregar um registro em um formulário ou subformulário, ou para consultas ou outro evento, faça as modificações necessárias. ------------------------------- No evento da combo0, Ao apertar tecla (keydown) insira o código abaixo: Private Sub Combo0_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 27 Then 'Se pressionou tecla ESCAPE então carrega a lsita completa da consulta strsql = "SELECT Tabela.cd_cliente, Tabela.nm_cliente FROM Tabela ORDER BY Tabela.nm_cliente; " Me.Combo0.RowSource = strsql Me.Combo0 = Null 'Limpa a combo End If End Sub Avelino Sampaio 25/04/2020 06:42:57 Ivan, Veja no fórum abaixo um tópico sobre este assunto. Lá tem um exemplo prático. http://maximoaccess.maisforum.com/t1624-resolvidobusca-cep-no-formulario-do-access-2007 Bom estudo Ivan 23/04/2020 14:14:36 Boa tarde Avelino, tenho um aplicativo baseado no access 2007, com cadastros e informações de clientes, e sempre tenho que cadastrar novos clientes. Gostaria de saber a seguinte: No formulario para entrar com novo cliente, preciso digitar as informações, Razao Social, CNPJ etc, queria saber se quando eu digitar o CEP, e der um TAB as informações de Rua, Bairro, Cidade e UF, se preencham automaticamente nos campos a elas relacionados, é possivel fazer isso e como faço? Avelino Sampaio 15/04/2020 16:33:52 Márcio, Vá no evento "Ao carregar" do formulário clientes e desabilite a linha: 'Call fncPermissões(Me) Bom estudo Márcio 15/04/2020 16:09:16 Parabéns Avelino! Grande iniciativa. Não caminhei muito, pois o formulário clientes não abre. Informe que o acesso está bloqueado. O que devo fazer para resolver isso e continuar a vídeo-aula. Parabéns mais uma vez! Avelino Sampaio 14/04/2020 09:48:58 Gilberto, Use o do wscript. exemplo: Dim objws As Object Set objws = CreateObject("wscript.shell") objws.SendKeys fncCapturaSenha, True objws.SendKeys "{ENTER}" Sucesso GILBERTO TEIXEIRA 13/04/2020 16:23:49 boa tarde avelino, como faço para enviar sendkey no windows 7 Avelino Sampaio 11/04/2020 04:17:29 Fico muito grato pelo depoimento de vocês. Francisco Sene 10/04/2020 12:04:10 Excelente. Sou novato neste mundo "Access" apesar dos meus 50 anos. Sou professor de Matemática e quero registrar que a sua didática e o seu material são muito eficazes. Penso que todos que tiverem dificuldades com o Access deveriam assistir algumas aulas com você. Parabéns e Obrigado. Fábio Bindá - Manaus/AM 08/04/2020 16:40:19 Parabéns Avelino, você é nota 1000!!! Seus tutoriais e materiais publicados estão me ajudando muito... essa matéria sobre consultas está simplesmente PERFEITA. WELSON ZEFERINO DE OLIVEIRA JUNIOR 07/04/2020 22:21:35 Estou contando nos dedos as suas aulas de vba, vc é iluminado por Deus. Que sua sabedoria venha crescer a cada dia. Agradeço muito por ter você como meu professor, suas aulas tem mudado a minha vida como futuro programador, obrigado. Márcio Melo - RJ 07/04/2020 21:57:32 Gostei muito desse artigo, da forma que elaborou, passou segurança em trabalharmos com o sql no VBA, onde tenho evitado... por muitas vezes apanhei em finalizar a escrita sql que se modifica do gerado pelo construtor para o utilizado no VBA. Utilizo de um projeto que existe na net desde a versão 2k e funciona em todas acima é o FrmGerReports, segue o link http://www.ativoaccess.com.br/mostra.exemplo.php?aplicativo=277 , de uma analisada, adaptei aos meus projetos, pessoal do site são nota 10 e tem sua mesma filosofia em ensinar, só que agora estão oferecendo o material que antes era de livre acesso, mais vale apena, foram as minhas fontes de aprendizagem no passado que utilizo até hoje. Forte abraço! James Resplandes 07/04/2020 19:20:19 Muito bom artigo, parabéns! Você, como sempre, contribuindo para o crescimento dessa fantástica ferramenta de aprendizagem. Guilherme 26/02/2020 18:27:10 Passando apenas para agradecer. Você é demais! Obrigado! |