Si potrebbe usare la Proprietà Hwnd, insieme con la funzione di sistema GetActiveWindow, per testare se excel e' il programma attivo o meno, e con qualche ragionamento capire se il file e' da chiudere o meno. Ad esempio
- Codice: Seleziona tutto
Public InFoc
Public Flag1
Private Declare Function GetActiveWindow Lib "user32" () As Long
Sub InFocusYN()
If GetActiveWindow <> Application.Hwnd Then
If InFoc = True Then InFoc = Now()
Else
InFoc = True
End If
'If Flag1 = False Then ThisWorkbook.Close SaveChanges:=True 'oppure False
If InFoc <> True Then
If InFoc + TimeValue("00:15:00") < Now Then
ThisWorkbook.Close SaveChanges:=True 'oppure False
End If
End If
If Flag1 <> True Then '**Vedi descrizione
If Flag1 + TimeValue("00:15:00") < Now Then
' ThisWorkbook.Close SaveChanges:=True 'oppure False
End If
End If
DeltaT = "00:01:00"
Application.OnTime Now + TimeValue(DeltaT), "InFocusYN"
End Sub
Va messa in un modulo vuoto, in modo che le dichiarazioni siano in testa a tutto.
Questa va lanciata inizialmente alla Open del workbook, poi si esegue ogni minuto.
Se excel e' la finestra attiva, allora InFoc viene messo True, altrimenti viene compilato con l' orario in cui per la prima volta excel non e' la finestra attiva.
Dopo 15 minuti che excel non e' piu' la finestra attiva il file viene chiuso.
A questo punto suggerirei di usare anche Falg1 come "Vero" (workbook attivo) o come "timestamp" di quando il workbook e' andato inattivo. Il codice per controllare Flag1 e' gia' inserito nella macro InFocYN, per abilitarlo va pero' scommentata l' istruzione ThisWorkbook.Close
Tutto questo richiede macro in ThisWorkbook come le seguenti:
- Codice: Seleziona tutto
Private Sub Workbook_Activate() ' Gestione Flag1, INVARIATA
Flag1 = True
End Sub
Private Sub Workbook_Deactivate() 'Gestione Flag1, VARIATA
Flag1 = Now()
End Sub
Private Sub Workbook_Open() 'AGGIUNTA per lanciare InFocYN la prima volta
Flag1=True
Call InFocusYN
End Sub
Ciao
Workbook_Open editata il 7-apr-2011 @ 14:30
Vedi anche viewtopic.php?f=26&t=107686&p=631483#p631466 che dovrebbe correggere un errore nel caso che il file sia stato normalmente chiuso