We help IT Professionals succeed at work.
Get Started

How to circumvent a Form_Unload event after issuing an Application.Quit command

Nick67
Nick67 asked
on
109 Views
Last Modified: 2016-02-11
Consider the attached file.
I has a form with the following code behind it
Option Compare Database
Option Explicit
Const timeToRun As Date = #11:17:00 AM#
Const DelayFromLastActivity As Long = 1
'minutes of delay
Public TheInterval As Long
Public db As Database
Public rs As Recordset
Dim SkipMessage As Boolean

Private Sub Form_Activate()

If DateDiff("s", Time(), timeToRun) < DelayFromLastActivity Then
    TheInterval = DelayFromLastActivity * 60 * 1000
Else
    TheInterval = DateDiff("s", Time(), timeToRun) * 1000
End If
Me.TimerInterval = TheInterval

End Sub

Private Sub Form_Current()
'this should only fireon opening because this form is unbound
'MsgBox "Current Event fired"
'MsgBox GetLocalTimeFromGMT(timeToRun)
'MsgBox ConvertLocalToGMT(timeToRun)

If DateDiff("s", Time(), timeToRun) < DelayFromLastActivity Then
    TheInterval = DelayFromLastActivity * 60 * 1000
Else
    TheInterval = DateDiff("s", Time(), timeToRun) * 1000
End If
Me.TimerInterval = TheInterval

End Sub



Private Sub Form_Timer()

Set db = CurrentDb
Set rs = db.OpenRecordset("select *  from tblTimes where 1=2;", dbOpenDynaset, dbSeeChanges)
With rs
    .AddNew
    !thedatetime = Now()
    !theuser = ReturnUserName
    !thecomputer = ReturnComputerName
    .Update
    Me.txtTimer.Value = Now()
    Me.txtTimer.Requery
End With
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
SkipMessage = True
Application.Quit acQuitSaveAll
SkipMessage = True
End Sub


Private Sub Form_Unload(Cancel As Integer)
Dim response As Integer
If SkipMessage = False Then
    response = MsgBox("Did you really intend to quit The Program? Yes to Quit, no to remain in The Program", vbYesNo + vbCritical, "Quit?")
    If response = vbNo Then
        Cancel = True
    End If
End If
End Sub

Open in new window


The application is designed to close itself based on two constants
Const timeToRun As Date = #11:17:00 AM#
Const DelayFromLastActivity As Long = 1
Adjust these in your tests as needful.

Now, I want the application to close DelayFromLastActivity minutes after the last form activity after timeToRun time.
It does this swimmingly.

If the Timer event is NOT the cause of the form's closure, I need a message allowing the user to bail on the closure.
This, too, works swimmingly.

However, you can watch this go down in the Timer event


SkipMessage = True 'skip the prompt in the unload
Application.Quit acQuitSaveAll
SkipMessage = True ' dammit I said skip the prompt in the unload


SkipMessage gets set to False at the end of the Timer event, regardless.
So, when I want the Timer to provide an automated close, instead I get a message box whose response gets ignored.
I don't want the message box to fire if the Timer event is the cause of the Unload()
Making SkipMessage a Public variable of  a code module doesn't help the issue, either.

So, what does Application.Quit do to module-level variables and how can I get clean, automated shutdown?
AutoClose.mdb
Comment
Watch Question
IT Manager
CERTIFIED EXPERT
Commented:
This problem has been solved!
Unlock 1 Answer and 6 Comments.
See Answer
Why Experts Exchange?

Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.

Jim Murphy
Programmer at Smart IT Solutions

When asked, what has been your best career decision?

Deciding to stick with EE.

Mohamed Asif
Technical Department Head

Being involved with EE helped me to grow personally and professionally.

Carl Webster
CTP, Sr Infrastructure Consultant

An Experts Exchange subscription includes unlimited access to online courses.

Get Started
Ask ANY Question

Connect with Certified Experts to gain insight and support on specific technology challenges including:

  • Troubleshooting
  • Research
  • Professional Opinions
Did You Know?

We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE