Auto shutdown for inactivity in Excel

J

jtfalk

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
 
P

Patrick Molloy

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
 
J

jtfalk

I went into tools-macros-visual basic

I clicked on ThisWorkbook and added the top 3 lines.

I then added a module and pasted the other in.

How do I get it to run?

I saved it - closed it- and opened it again and it does nothing.
 
J

jtfalk

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
 
P

Patrick Molloy

not thisworkbook, as I wrote add a new code module

ALT+F11 from the excel workbook to open the editor
then INTERT ( a menu item ) then "MODULE" ( NOT "CLASS MODULE")
 
P

Patrick Molloy

and also you will need to set a reference to the Widows Scriot Host Model as
described in the code that you posted.
 
J

jtfalk

I put all the code in the newly made module (not class) and ran it - it
errored out on that same line
Dim SH As IWshRuntimeLibrary.WshShell

The same thing happened when I put this in the ThisWorkbook:
Sub Auto_Open()
Application.OnTime Now() + TimeValue("00:00:20"), "CloseMe"
End Sub

And this in the newly made module:
'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

What is Windows Script Host Object Model? is this something that I have to
do and that is why it keeps erroring out? It runs auctomatically but errors
out is that
Dim SH As IWshRuntimeLibrary.WshShell correct or do I have to add something
in to get that to run?

Thanks
 
D

Dave Peterson

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top