bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Como identificar, pelo VBA, se um objeto está aberto.

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é 2x no Cartão de Crédito. 

Veja como comprar e saiba mais sobre o material oferecido,  clicando aqui.

Open v3

 

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!


 

 


18 comentário(s)

Vagner   13/01/2020 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/2020 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.

James Resplandes   25/09/2018 15:10:38

Top!!!
Muito legal mesmo, ótima dica Avelino.

Luciano   08/12/2015 16:47:59

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

Formiga10x   17/07/2015 20:16:18

Muito bom mestre foi de muita ajuda.
Muito obrigado.

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

Avelino, boa noite

Como podemos saber se um Recordset está aberto?

Obrigado

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!

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!

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   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!

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?

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

Muito bom!

jonathan   18/04/2012 21:37:21

Boa noite!

Parabéns, ótima solução.

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


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

Mais uma vez superando expectativas.

Muito obrigado Avelino!!!

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!

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

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


Envie seu comentário: