Como identificar, pelo VBA, se um objeto está aberto ?
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.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Muitas vezes é necessário identificar se um objeto (formulário, relatório, consulta ou tabela) está aberto, para uma tomada de decisão, dentro de um procedimento.
Vamos supor que precisamos passar um valor para o campo de um determinado formulário. O valor seria passado assim:
forms!frmContatos!DataDeNascimento = "15/05/1975"
Se o VBA não encontrar o formulário frmContatos aberto, receberemos a seguinte mensagem:
Podemos optar em alterar o código para tratar o erro 2450 ou alterar o código para fazer uma verificação prévia, se o formulário se encontra aberto.
O comando utilizado para saber se o formulário se encontra aberto, é este em vermelho:
If CurrentProject.AllForms("frmCadastro").IsLoaded Then 'Detectou que está aberto
'Acrescentamos a data ao campo Forms!frmContatos!DataDeNascimento = "15/05/1975" Else 'detectou que está fechado 'abrimos, então, o formulário que se encontra fechado. DoCmd.OpenForm "frmcadastros", , , "Contato='Avelino Sampaio'" 'Acrescentamos a data ao campo Forms!frmContatos!DataDeNascimento = "15/05/1975" End If
Os comandos abaixo são para verificar relatório e macro abertos, respectivamente:
'Comando para verificar um relatório aberto. Retorna TRUE se estiver aberto
CurrentProject.AllReports("NomeDoRelatório").IsLoaded
'Comando para verificar uma macro aberta. Retorna TRUE se estiver aberta.
CurrentProject.AllMacros("NomeDaMacro").IsLoaded
Até bem pouco tempo, achava que não existia uma propriedade específica para identificar tabelas e consultas abertas, até que descobri que estava na CurrentData.
'Comando para verificar consulta aberta. Retorna TRUE se estiver aberta.
CurrentData.AllQueries("NomeDaConsulta").IsLoaded
'comando para verificar tabela aberta. Retorna TRUE se estiver aberta.
CurrentData.AllTables("NomeDaTabela").IsLoaded
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
Vídeo - Criando Ribbons parte 1 - Conhecendo a estrutura Xml
18 comentário(s) James Resplandes 25/09/2023 15:10:38 Top!!! Muito legal mesmo, ótima dica Avelino. Luciano 08/12/2022 16:47:59 Como fazer para verificar se o SUB-formulário está aberto? Formiga10x 17/07/2022 20:16:18 Muito bom mestre foi de muita ajuda. Muito obrigado. Fabio Bulhoes 24/05/2022 22:25:15 Avelino, boa noite Como podemos saber se um Recordset está aberto? Obrigado Avelino Sampaio 15/08/2021 14:49:19 Regis, Copie a função abaixo para um módulo global: Public Function fncTabelaExiste(strNomeTabela As String) As Boolean fncTabelaExiste = IIf(DCount("name", "MsysObjects", "(type = 1 or type =2) AND name='" & strNomeTabela & "'") = 1, True, False) End Function Basta aplicar a função If fncTabelaExiste("NomeDatabela") then 'sim existe else 'não existe end if Sucesso! Regis da Silva 15/08/2021 14:06:53 Estava procurando por todo canto mas... Como eu faço para verificar se uma tabela já existe? Aurino Andrade 24/07/2021 13:41:36 Mestre Avelino, Obrigado pela atenção, sua resposta foi precisa e resolve minha necessidade. Grato pela ajuda. Obrig@do! Avelino Sampaio 24/07/2021 06:38:19 Arino, Especifique melhor sobre este "numero". Usar o nome do controle não serve? Por exemplo: screen.ActiveControl.Name Você pode criar uma numeração propria para os controles, usando a propriedade MARCA. Depois é só utilizar o comando screen.ActiveControl.Tag Sucesso! Arino Andrade 23/07/2021 12:26:39 Boa tarde! Estas instruções são muito úteis. Preciso saber em qual controle eu cliquei (seja um botão, campo, legenda e etc.) tem como saber o número do controle em que cliquei? Obrigado! Hephraim BF 26/04/2021 09:25:53 Muito bom! jonathan 18/04/2021 21:37:21 Boa noite! Parabéns, ótima solução. Usuario 09/02/2021 12:42:50 Função: colocar no modulo e chamar no formulário Function CHECA_FORM(FORMULARIO As String) As Boolean Select Case CurrentProject.AllForms(FORMULARIO).IsLoaded Case True CHECA_FORM = True Case False CHECA_FORM = False End Select End Function No formulário: IF checa_form("nomedoformulario) = true then me.campo1 = "xx" end if Paulo Vinicius 08/02/2021 20:58:53 Mais uma vez superando expectativas. Muito obrigado Avelino!!! Marcelo David 08/02/2021 19:50:14 Opa! Muito bom, eu ja usava o código para verificar os formulários abertos, mas não sabia que dava para saber das tabelas e consultas!! Muito obrigado por compartilhar! Data em detalhe 08/02/2021 18:55:08 Olá Avelino. Fala sério, colocou a data do seu aniversário só pra todo mundo mandar presente né. rs mas valeu a dica, muito interessante, vai ajudar muito nos projetos que desenvolvo. Grande abraço. Paulo Cesar - paulo@softaccess.com.br Gilberto Mendes 08/02/2021 13:24:03 Boa dica. Eu usava um método bem português, de checar se entre todos os formularios o que eu queria estava aberto. Parabéns pela dica. Gilberto Mendes www.accesspro.com.br Vagner 13/01/2021 17:37:09 Avelino, meu projeto está na rede interna na minha empresa. Usei suas dicas para saber que formulário está aberto mas não funcionou. Confirmei que o colega estava com determinado formulário aberto mas não dava essa informação. Será pq executo na rede? Flavio Pereira 01/01/2021 18:55:12 Avelino, uso um banco de dados com alguns usuários utilizando área de trabalho remota simultaneamente. Como poderia verificar se um determinado formulário foi aberto por um outro usuário? Obrigado. |