... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,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.


Função para fechar todos os formulários

Em certas situações é necessário forçar o fechamento de formulários.  Por exemplo, o aplicativo Maestro que ofereço neste site, faz uso desta técnica de fechar os formulários para poder realizar o logoff e trocar de usuário.

Quando um formulário é aberto, ele assume um número que começa do zero(0).  Podemos identificar o nome de um formulário aberto, através deste número.  Exemplo de dois formulários abertos:

forms(0).name :::> frmLogin

forms(1).name :::> frmClientes

A propriedade count retorna à quantidade de formulários que estão abertos.  Exemplo:

forms.count :::> 2

Vamos supor que eu feche o formulário frmLogin do exemplo acima, o número de identificação será  atualizado automaticamente e o formulário frmClientes passará a ser identificado pelo zero(0)

forms(0).name :::> frmClientes

forms(1).name :::> Erro 2456 - número inválido

Observe na função abaixo que o laço FOR foi configurado para percorrer os formulários do maior número de identificação para o menor (step -1), justamente por causa da reconfiguração automática dos números de identificação dos formulários abertos que ocorre quando um deles é fechado.

Public sub fncFechaForms(Optional booLogOff As Boolean = False)
On Error Resume Next
Dim j As Integer, nf As Integer
'------------------------------------------------------------
'Armazena na variável nf, a quantidade de formulários abertos
'------------------------------------------------------------
nf = Forms.Count 
'-----------------------------------------------------------------------------
'Percorre os formulários abertos,do maior número de identificação para o menor
'-----------------------------------------------------------------------------
For j = (nf - 1) To 0 Step -1
   If booLogOff Then
      '------------------------------------------------------------------------
      'Fecha todos os formulários, mantendo aberto apenas o formulário frmLogin
      '------------------------------------------------------------------------
      If Not Forms(j).Name = "frmLogin" Then
         DoCmd.Close acForm, Forms(j).Name, acSaveYes
      End If
   Else
      '-------------------------------------------------------
      'Fecha todos os Forms, incluindo o formulário de Login
      '-------------------------------------------------------
      DoCmd.Close acForm, Forms(j).Name, acSaveYes
   End If
Next j
End sub

Para realizar o logoff a função é chamada assim:

call fncFechaForms(true) :::> fecha todos os formulários, exceto o formulário de Login (frmLogin)

Ao encerrar o aplicativo, a função é chamada para fechar todos os formulários:

call fncFechaForms() :::> fecha todos os formulários.

Bom estudo!


 

 


1 comentário(s)

Sales   09/01/2018 19:01:10

Boa noite,
Fiz um botão para fechar os formulários, exceto um, mas ta fechando todo o banco de dados.
Help

Private Sub REABRIR_Click()
Call fncFechaFormsPS(True)
Me.SITUAÇÃO.Value = "CANCELADO"
End Sub

Public Function fncFechaFormsPS(Optional booLogOff As Boolean = False)
'----------------------------------
'fecha todos os formulários abertos
'----------------------------------
On Error Resume Next
Dim j As Integer, NF As Integer
NF = Forms.Count
For j = (NF - 1) To 0 Step -1
If booLogOff Then
If Not Forms(j).Name = "F_PS_CADASTRO" Then
DoCmd.Close acForm, Forms(j).Name, acSaveYes
End If
Else
DoCmd.Close acForm, Forms(j).Name, acSaveYes
End If
Next j
End Function


Envie seu comentário: