Queria saber se alguém pode me explicar uma coisa que, para mim, está sendo um mistério : alguns comandos ora funcionam ora me aparece uma mensagem : "esta ação não pode ser executada durante o processamento de um evento de formulário ou relatório" . um dos comandos é o docmd.close , se quero fechar um formulário. Qual é a lógica que permite ou não permite usar esse tipo de comando dentro de uma evento do fomulário ?
3 participantes
[Resolvido]Funcionamento comando DoCmd.Close
sergio de paula- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 75
Registrado : 19/04/2020
- Mensagem nº1
[Resolvido]Funcionamento comando DoCmd.Close
DamascenoJr.- Moderador
- Respeito às regras :
Sexo :
Localização :
Mensagens : 3845
Registrado : 22/11/2016
- Mensagem nº2
Re: [Resolvido]Funcionamento comando DoCmd.Close
Não use apenas docmd.close
Faça a indicação completa do objeto a ser fechado.
Docmd.close acform, "nome do formulário"
Ou
Docmd.close acreport, "nome do relatório"
Não indicar o nome do objeto completo pode confundir o código sobre qual objeto deve ser fechado. Não é possível fechar um objeto que está abrindo, por exemplo. Sem indicar o nome do objeto, pode está fazendo com que esse seu problema aconteça.
Faça a indicação completa do objeto a ser fechado.
Docmd.close acform, "nome do formulário"
Ou
Docmd.close acreport, "nome do relatório"
Não indicar o nome do objeto completo pode confundir o código sobre qual objeto deve ser fechado. Não é possível fechar um objeto que está abrindo, por exemplo. Sem indicar o nome do objeto, pode está fazendo com que esse seu problema aconteça.
sergio de paula- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 75
Registrado : 19/04/2020
- Mensagem nº3
Re: [Resolvido]Funcionamento comando DoCmd.Close
Damasceno, eu não estou usando somente o docmd.close. O que me estranha é isso ! Mesmo usando os parâmetros do comando ele dá este erro. Principalmente se há um msgbox anterior ao comando, na mesma sub ! Há alguma lógica nisso que eu desconheço e gostaria de saber, para evitar esse tipo de erro !
DamascenoJr.- Moderador
- Respeito às regras :
Sexo :
Localização :
Mensagens : 3845
Registrado : 22/11/2016
- Mensagem nº4
Re: [Resolvido]Funcionamento comando DoCmd.Close
Como exemplo, não é possível usar o docmd.close no evento "Ao abrir" de um formulário para fechar o mesmo formulário. Salvo engano, no evento "Ao carregar" também.
São essas a situações de exemplo. Talvez seja o seu caso. Não sendo, o ideal é anexar o exemplo e dar o passo a passo de como se deparar com o erro. Assim seremos mais objetivos em apontar a causa do seu problema.
São essas a situações de exemplo. Talvez seja o seu caso. Não sendo, o ideal é anexar o exemplo e dar o passo a passo de como se deparar com o erro. Assim seremos mais objetivos em apontar a causa do seu problema.
.................................................................................
Ajude-se a ser ajudado, anexe seu projeto.
Sempre tente entender o código, não somente copie e cole.
Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
digitaltec- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 153
Registrado : 09/05/2020
- Mensagem nº5
Re: [Resolvido]Funcionamento comando DoCmd.Close
Não sei se ajuda mais aqui estava com um problema parecido eu resolvi indo no vba na parte superior em depurar fui em compilar ele achou um erro eu fiz a correção e o mesmo parou de dar problema. Boa sorte
sergio de paula- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 75
Registrado : 19/04/2020
- Mensagem nº6
Re: [Resolvido]Funcionamento comando DoCmd.Close
Segue a rotina :
Private Sub cliente_LostFocus()
If DCount("cliente", "serviço", "cliente = '" & Me!cliente & "' and isnull(finalizaçao)") <> 0 Then
Select Case BBmsgbox(1, 3, "Botões personalizados", "este cliente possui serviços não finalizados, escolha a opção ", 64, "ver os serviços", "mudar o cliente", "cancelar")
Case "ver os serviços"
DoCmd.OpenForm "histórico", , , "cliente = '" & Me!cliente & "'", , acDialog
guardarec1 ("histórico")
Case "mudar o cliente"
DoCmd.RunCommand acCmdUndo
Exit Sub
Case "cancelar"
DoCmd.RunCommand acCmdUndo
DoCmd.Close acForm, "serviços"
Exit Sub
End Select
End If
Me!codigoserv = DMax("codigoserv", "serviço") + 1
End Sub
acontece quando seleciona a opção "cancelar"
Private Sub cliente_LostFocus()
If DCount("cliente", "serviço", "cliente = '" & Me!cliente & "' and isnull(finalizaçao)") <> 0 Then
Select Case BBmsgbox(1, 3, "Botões personalizados", "este cliente possui serviços não finalizados, escolha a opção ", 64, "ver os serviços", "mudar o cliente", "cancelar")
Case "ver os serviços"
DoCmd.OpenForm "histórico", , , "cliente = '" & Me!cliente & "'", , acDialog
guardarec1 ("histórico")
Case "mudar o cliente"
DoCmd.RunCommand acCmdUndo
Exit Sub
Case "cancelar"
DoCmd.RunCommand acCmdUndo
DoCmd.Close acForm, "serviços"
Exit Sub
End Select
End If
Me!codigoserv = DMax("codigoserv", "serviço") + 1
End Sub
acontece quando seleciona a opção "cancelar"
DamascenoJr.- Moderador
- Respeito às regras :
Sexo :
Localização :
Mensagens : 3845
Registrado : 22/11/2016
- Mensagem nº7
Re: [Resolvido]Funcionamento comando DoCmd.Close
Troque seu código por esse
E no evento "No Timer" do formulário, coloque
- Código:
If DCount("cliente", "serviço", "cliente = '" & Me!cliente & "' and isnull(finalizaçao)") <> 0 Then
Select Case BBmsgbox(1, 3, "Botões personalizados", "este cliente possui serviços não finalizados, escolha a opção ", 64, "ver os serviços", "mudar o cliente", "cancelar")
Case "ver os serviços"
DoCmd.OpenForm "histórico", , , "cliente = '" & Me!cliente & "'", , acDialog
guardarec1 ("histórico")
Case "mudar o cliente"
DoCmd.RunCommand acCmdUndo
Exit Sub
Case "cancelar"
DoCmd.RunCommand acCmdUndo
Me.TimerInterval = 100
Exit Sub
End Select
End If
Me!codigoserv = DMax("codigoserv", "serviço") + 1
E no evento "No Timer" do formulário, coloque
- Código:
Me.TimerInterval = 0
DoCmd.Close acForm, "serviços"
.................................................................................
Ajude-se a ser ajudado, anexe seu projeto.
Sempre tente entender o código, não somente copie e cole.
Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
sergio de paula- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 75
Registrado : 19/04/2020
- Mensagem nº8
Re: [Resolvido]Funcionamento comando DoCmd.Close
Caro Damasceno,
Num primeiro momento, funcionou. Vou tentar outras situações para ver se não tem outro problema, talvez tenha que definir o timerinterval = 0 no form load.
Mas, você podia me explicar o porque essa solução corrige o problema ? Até para que eu possa perceber outros que aparecem/apareçam ?
obrigado !!
Num primeiro momento, funcionou. Vou tentar outras situações para ver se não tem outro problema, talvez tenha que definir o timerinterval = 0 no form load.
Mas, você podia me explicar o porque essa solução corrige o problema ? Até para que eu possa perceber outros que aparecem/apareçam ?
obrigado !!
DamascenoJr.- Moderador
- Respeito às regras :
Sexo :
Localização :
Mensagens : 3845
Registrado : 22/11/2016
- Mensagem nº9
Re: [Resolvido]Funcionamento comando DoCmd.Close
Não é possível fechar o formulário enquanto um campo desse mesmo formulário está perdendo o foco. Se o formulário fechar, para onde o foco vai?
O que o código aí faz é ativar um intervalo de 100 milésimos de segundo. É o tempo que o campo termina de processar o evento de perder o foco. Após esses 100 milésimos, o código do evento do cronômetro solicita o fechamento do formulário.
O que o código aí faz é ativar um intervalo de 100 milésimos de segundo. É o tempo que o campo termina de processar o evento de perder o foco. Após esses 100 milésimos, o código do evento do cronômetro solicita o fechamento do formulário.
.................................................................................
Ajude-se a ser ajudado, anexe seu projeto.
Sempre tente entender o código, não somente copie e cole.
Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
sergio de paula- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 75
Registrado : 19/04/2020
- Mensagem nº10
Re: [Resolvido]Funcionamento comando DoCmd.Close
Agora eu entendi a lógica e porque alguns erros acontecem, pois uso muitos códigos no "lost Focus". Obrigado !!
DamascenoJr.- Moderador
- Respeito às regras :
Sexo :
Localização :
Mensagens : 3845
Registrado : 22/11/2016
- Mensagem nº11
Re: [Resolvido]Funcionamento comando DoCmd.Close
O fórum agradece o retorno. Sucesso.
.................................................................................
Ajude-se a ser ajudado, anexe seu projeto.
Sempre tente entender o código, não somente copie e cole.
Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.