Jump to content
paulosemblano

BeforeClose

Recommended Posts

paulosemblano

Preciso descobrir em qual botão o usuário clicou quando fechou o arquivo: SIM - NÃO - CANCELAR

Caso clique no SIM, automaticamente antes de fechar a Plan1 é selecionada, senão continua na mesma planilha. O problema é que, ao clicar em CANCELAR, a Plan1 é selecionada.

Outro problema é quando o usuário salva o arquivo antes de fechar, ele fecha automaticamente sem fazer perguntas. Também não consegui direcionar para a Plan1.

Código atual:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Cancel = False Then Plan1.Select

End Sub

Share this post


Link to post
Share on other sites
jnabais

Olá!

Porque não utilizar uns If's ... "Application.GoTo Sheets("Folha2").Range("A1") ... conforme o objectivo e fazer respectivo Save...

Bom trabalho

Share this post


Link to post
Share on other sites
jpaulino

Não entendi muito bem ... mas porque não constroi a sua própria msgbox com a pergunta ao utilizador?

Algo como:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim result As VbMsgBoxResult
result = MsgBox("Deseja gravar o documento ?", vbYesNoCancel + vbExclamation)

    Select Case result
      Case vbCancel
        ' faz qualquer coisa
      Case vbYes
        ' faz qualquer coisa
      Case vbNo
        ' faz qualquer coisa
     End Select

End Sub

Share this post


Link to post
Share on other sites
paulosemblano

Tentei este código baseado no que colocou, mas quando escolhe YES não consigo retirar a mensagem final do próprio evento.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim RESULT As VbMsgBoxResult

RESULT = MsgBox("Deseja gravar o documento?", vbYesNoCancel + vbExclamation)

Select Case RESULT

      Case vbCancel

            Cancel = True

      Case vbYes

            ThisWorkbook.Saved = False

      Case vbNo

            ThisWorkbook.Saved = True

End Select

End Sub

Share this post


Link to post
Share on other sites
jpaulino

Mas como tem só indica que o workbook está gravado.

Se é só para não mostrar apenas a mensagem, pode usar o Cancel = True, se é para gravar, então é fazer o ThisWorkbook.Save

Share this post


Link to post
Share on other sites
paulosemblano

Com este código funcionou:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.ScreenUpdating = False

Application.EnableCancelKey = xlDisabled

If Not ActiveWorkbook.Saved Then

  Dim RESULT As VbMsgBoxResult

  RESULT = MsgBox("Deseja gravar o documento?", vbYesNoCancel + vbExclamation)

  Select Case RESULT

          Case vbCancel

              Cancel = True

          Case vbYes

              ActiveWorkbook.Save

          Case vbNo

              ThisWorkbook.Saved = True

  End Select

End If

Application.ScreenUpdating = True

End Sub

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.