MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


    Evento Unload

    avatar
    victor.zero
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 97
    Registrado : 16/02/2012

    Evento Unload Empty Evento Unload

    Mensagem  victor.zero em 30/5/2012, 17:40

    Saudações

    Criei um botão em meu formulario para fechá-lo, porém necessitei acrescentar nele uma função de desfazer alterações antes de fechar o form.

    aí surgiu um problema.

    quando eu altero algo, e fecho o formulário, funciona perfeitamente.

    Mas quando eu não altero nada, ou seja, simplesmente abro o formulário e clico no botão para fechar ele dá a seguinte mensagem:
    "O comando ou ação 'Desfazer' não está disponível agora!".

    e entao o formulario nao fecha.

    Private Sub Form_Unload(Cancel As Integer)
    Dim i As Integer
    Dim sMsg As String

    sMsg = "Ao fechar os registros alterados ou inclusos não serão salvo?"
    i = MsgBox(sMsg, vbYesNo, "Fechar!")

    If i = vbYes Then
    DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
    Else

    If i = vbNo Then
    DoCmd.CancelEvent
    Me.Nome_Empregado.SetFocus
    End If
    End If
    End Sub

    como posso fechar o fomulário, tendo alterado ou não seu conteúdo?
    good guy
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1271
    Registrado : 05/02/2010

    Evento Unload Empty Evento Unload

    Mensagem  good guy em 30/5/2012, 18:33

    Olá victor,

    Isso é uma questão de lógica pura. Tente assim:

    Private Sub Form_Unload(Cancel As Integer)
    Dim i As Integer
    Dim sMsg As String

    sMsg = "Deseja encerrar o aplicativo salvando os registros alterados ou inclusos ou simplesmente fechar sem salvar?"
    i = MsgBox(sMsg, vbYesNoCancel, "Fechar!")

    If i = vbYes Then
    DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
    End If

    If i = vbNo Then

    DoCmd.Close acForm, "NomedoForm", acSaveNo

    End If

    If i = vbCancel Then
    DoCmd.CancelEvent
    Me.Nome_Empregado.SetFocus
    End If

    End Sub
    Lupércio
    Lupércio
    VIP
    VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1140
    Registrado : 07/05/2011

    Evento Unload Empty Re: Evento Unload

    Mensagem  Lupércio em 30/5/2012, 20:46

    Veja isso: Assim funciona

    Alterei sua linha.........DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70 para : Me.Undo

    E acrecentei o cancel = true

    Agora funciona! Shocked

    Coloque apenas o nome do seu formuláio no código! Última linha do código!

    No click do botão defina:



    Private Sub SeuBotão_Click()
    Dim i As Integer
    Dim sMsg As String
    sMsg = "Deseja as alterações no formulário?"
    i = MsgBox(sMsg, vbYesNo, "Fechar!")
    Cancel = True
    If i = vbNo Then

    Me.Undo
    Cancel = True
    End If

    If i = vbYes Then
    If i = vbCancel Then
    DoCmd.CancelEvent
    Me.Nome_Empregado.SetFocus
    End If
    End If

    DoCmd.Close acForm, "NomeSeuForm"

    End Sub

    Lupércio
    Lupércio
    VIP
    VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1140
    Registrado : 07/05/2011

    Evento Unload Empty Re: Evento Unload

    Mensagem  Lupércio em 30/5/2012, 21:17

    Olá vitor!

    O outro funciona mas esse é melhor na minha humilde opnião!

    Melhor porque se você abrir o registro e não fizer nenhuma atualização ou alteração ele fecha direto sem a mensagem,
    agora se você alterar algo o cógido enxerga e faz a pergunta se quer salvar a alteração ou não!


    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim strMsg As String
    Dim iResponse As Integer

    ' Especifica a mensagem a ser apresentada.
    strMsg = "Deseja salvar as alterações" & Chr(10)
    strMsg = strMsg & "Clique Sim para salvar ou Não para ignorar."

    ' Mostra a caixa de mensagem.
    iResponse = MsgBox(strMsg, vbQuestion + vbYesNo, "Salvar registro?")

    ' Verifica a resposta do usuário.
    If iResponse = vbNo Then
    ' Desfaz as alterações.
    DoCmd.RunCommand acCmdUndo
    ' Cancela a atualização.
    Cancel = True
    Me.Nome_Empregado.SetFocus
    End If
    End Sub

    Abração amigo!
    avatar
    victor.zero
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 97
    Registrado : 16/02/2012

    Evento Unload Empty Re: Evento Unload

    Mensagem  victor.zero em 30/5/2012, 21:34

    beleza o problema é que tenho nesse formulário uns 3 subformulários, Estou no formulário principal e passo para o 1 ou 2 ou 3 subformulário fica me perguntando se desejo salvar, mais na verdade gostaria que isso só acontecesse se a operação for finalizada como o sistema saberia se a operação estar sendo ou não finalizada? quando eu clicasse no botão gravar ou ao fechar o formulário ai sim viria a mensagem "Deseja salvar as alterações".

    se você puder me ajudar lhe agradeço

    esse método que você me passou funciona muito bem em situações cujo não tenho subformulário.
    Lupércio
    Lupércio
    VIP
    VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1140
    Registrado : 07/05/2011

    Evento Unload Empty Re: Evento Unload

    Mensagem  Lupércio em 30/5/2012, 22:52

    Vitor testa ai no botão formulário principal, no final do código coloque o nome do form!

    Private Sub Fechar_Click()
    Dim strMsg As String
    Dim iResponse As Integer

    ' Especifica a mensagem a ser apresentada.
    strMsg = "Deseja salvar as alterações" & Chr(10)
    strMsg = strMsg & "Clique Sim para salvar ou Não para ignorar."

    ' Mostra a caixa de mensagem.
    iResponse = MsgBox(strMsg, vbQuestion + vbYesNo, "Salvar registro?")

    ' Verifica a resposta do usuário.
    If iResponse = vbNo Then
    ' Desfaz as alterações.
    Me.Undo
    ' Cancela a atualização.
    Cancel = True
    End If
    DoCmd.Close acForm, "NomeFormulárioPrincipal"
    End Sub
    Lupércio
    Lupércio
    VIP
    VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1140
    Registrado : 07/05/2011

    Evento Unload Empty Re: Evento Unload

    Mensagem  Lupércio em 30/5/2012, 22:53

    Caso não consiga se você quiser que eu o ajudo...... se puder postar o bd!
    Uma correção todos iram lher ajudar!


    Última edição por Lupércio em 1/6/2012, 23:41, editado 1 vez(es)
    Lupércio
    Lupércio
    VIP
    VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1140
    Registrado : 07/05/2011

    Evento Unload Empty Re: Evento Unload

    Mensagem  Lupércio em 30/5/2012, 23:13

    Vitor coloque este código no formulário principal!

    Private Sub Form_BeforeUpdate(Cancel As Integer)
    On Error Resume Next
    If Me.Dirty Then
    If MsgBox("O Registo foi alterado ou incluído. Deseja salvar?", vbExclamation + vbYesNo, Me.Caption) = vbYes Then
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    Else
    Me.Undo
    DoCmd.CancelEvent
    End If
    End If
    End Sub


    E teste ai!
    avatar
    victor.zero
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 97
    Registrado : 16/02/2012

    Evento Unload Empty Re: Evento Unload

    Mensagem  victor.zero em 31/5/2012, 11:54

    Lupércio, Obrigado pela Ajuda, vou testar qualquer coisa eu retorno.

    Conteúdo patrocinado

    Evento Unload Empty Re: Evento Unload

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 15/11/2019, 15:46