... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$145,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Como identificar, pelo VBA, se um objeto está aberto ?

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:

Usando Access - Cadastro de clientes

 

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!


 

 


15 comentário(s)

Gilberto Mendes   08/02/2012 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

Data em detalhe   08/02/2012 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

Marcelo David   08/02/2012 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!

Paulo Vinicius   08/02/2012 20:58:53

Mais uma vez superando expectativas.

Muito obrigado Avelino!!!

Usuario   09/02/2012 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


jonathan   18/04/2012 21:37:21

Boa noite!

Parabéns, ótima solução.

Hephraim BF   26/04/2013 09:25:53

Muito bom!

Regis da Silva   15/08/2013 14:06:53

Estava procurando por todo canto mas...
Como eu faço para verificar se uma tabela já existe?

Avelino Sampaio   15/08/2013 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!

Arino Andrade   23/07/2014 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!

Avelino Sampaio   24/07/2014 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!

Aurino Andrade   24/07/2014 13:41:36

Mestre Avelino,

Obrigado pela atenção, sua resposta foi precisa e resolve minha necessidade.

Grato pela ajuda.

Obrig@do!

Fabio Bulhoes   24/05/2015 22:25:15

Avelino, boa noite

Como podemos saber se um Recordset está aberto?

Obrigado

Formiga10x   17/07/2015 20:16:18

Muito bom mestre foi de muita ajuda.
Muito obrigado.

Luciano   08/12/2015 16:47:59

Como fazer para verificar se o SUB-formulário está aberto?


Envie seu comentário: