View Single Post
  #9   Report Post  
Posted to microsoft.public.excel.programming
Dave Peterson Dave Peterson is offline
external usenet poster
 
Posts: 35,218
Default Auto shutdown for inactivity in Excel

Try:

Option Explicit
Public Sub CloseMe()
Dim SH As Object 'IWshRuntimeLibrary.WshShell
Dim Res As Long

'Set SH = New IWshRuntimeLibrary.WshShell
Set SH = CreateObject("WScript.Shell")
Res = SH.Popup(Text:="Are you still there?", secondstowait:=2, _
Title:="Active", Type:=vbYesNo)
If Res = vbYes Then
Application.OnTime Now() + TimeValue("00:00:20"), "CloseMe"
Else
ThisWorkbook.Save
ThisWorkbook.Close
End If
End Sub

And you'll avoid having to use a reference.
Tools|References
Scrolling down the list looking for:
Windows Script Host Object Model
and checking it.

======
Just some things to be aware of...

Some versions of windows won't close that popup. You'll want to test your code
on all versions that you support.

And I'm surprised that any developer would do this. I would have no idea if
that workbook should be saved or closed without saving.

If the code closes it without saving, then I could have destroyed hours of
changes that the user did.

If the code closes it and saves it, then I could be destroying data by saving
changes that shouldn't have been saved (maybe the user made a significant change
to play a what-if game or maybe the user just made a horrible mistake).

Either way, I'm don't understand how a developer can know and why they'd make
either assumption.


jtfalk wrote:

I get a
Compile error, User defined type not defined
Dim SH As IWshRuntimeLibrary.WshShell (with this highlighted)

Public Sub CloseMe()
Dim SH As IWshRuntimeLibrary.WshShell
Dim Res As Long

Set SH = New IWshRuntimeLibrary.WshShell
Res = SH.Popup(Text:="Are you still there?", secondstowait:=2, _
Title:="Active", Type:=vbYesNo)
If Res = vbYes Then
Application.OnTime Now() + TimeValue("00:00:20"), "CloseMe"
Else
ThisWorkbook.Save
ThisWorkbook.Close
End If
End Sub

"Patrick Molloy" wrote:

in a standard code module
(in the app develeopment environment. INSERT MODULE)

the Auto_Open name means that this will run when the workbook opens

"jtfalk" wrote:

I found this from an earlier post. Where and how do I put this in to make it
work?

That code does not look for inactivity. It closes the file after 30 minutes
regardless... Here is a slight modification of that code. It will pop up a
timed message box every (currently set to 20 seconds for degbugging but you
can change it to 30 minutes). The message box will stay up for 2 seconds. If
you hit yes then the 20 second (30 Minute) clock will start again. If not
then it saves and closes the file... Not you need to reference "Windows
Script Host Object Model" (in the VBE Tools - References - "Windows Script
Host Object Model"). This code sould be placed in a standard code module.

Sub Auto_Open()
Application.OnTime Now() + TimeValue("00:00:20"), "CloseMe"
End Sub

'requires reference to "Windows Script Host Object Model"
Public Sub CloseMe()
Dim SH As IWshRuntimeLibrary.WshShell
Dim Res As Long

Set SH = New IWshRuntimeLibrary.WshShell
Res = SH.Popup(Text:="Are you still there?", secondstowait:=2, _
Title:="Active", Type:=vbYesNo)
If Res = vbYes Then
Application.OnTime Now() + TimeValue("00:00:20"), "CloseMe"
Else
ThisWorkbook.Save
ThisWorkbook.Close
End If
End Sub


--

Dave Peterson