07/11/2023 - Scolaretto ha scritto:
Prima di tutto ti ringrazio per la soluzione, che ovviamente funziona, sarebbe bello che arrivasse un Messaggio all'utente e poi chiudere il file lasciando aperto excel, nel caso l'utente avesse in elaborazione altri file. Tutto bello però io non sono in grado di sviluppare tale procedura.
In Vba puoi utilizzare delle API per rintracciare il processo e terminarlo.
Se non vuoi usare le Api, personalmente te lo sconsiglio, con degli scripot da richiamare in Vba per eseguirli, puoi rintracciare e terminare il processo.
Esempio: (strFileTerminate sarà la fullpath, completo di nome del file excel, per il quale terminare il processo, da passare come parametro per esempio ad un VbScript da richiamare nel codice del VBA)
' check if excel file exists
If objFSO.FileExists(strFileTerminate) Then
' set list excel processes
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set listProcess = objService.ExecQuery("Select * from Win32_Process Where Name = 'EXCEL.EXE'")
' enumerate the processes excel and kill the process if it exists
For Each objProcess in listProcess
If InStr(objProcess.CommandLine, strFileTerminate) > 0 Then
objProcess.Terminate
End If
Next
End If
Implementando con tale approccio è possibile individuare il nome del computer che sta utilizzando quel processo di excel che è stato specificato di terminare, ed inviare al coputer della rete, se predisposto, per esempio un messaggio di popup per indicare che il processo è stato terminato per un certo motivo che vuoi comunicare.
Per esempio una cosa di questo tipo… dove per 10 secondi apparirà un messaggio con l'icona di Information
' send message
objShell.Popup "Message...", 10, "Title...", 48
Insomma… si possono fare tante cose, bisogna studiare i metodi, avere le autorizzazione di accesso ai file e ai computer remoti, etc etc … anche con altri metodi e approcci si possono fare le stesse cose. (questi sopra riportati sono solo delle tracce in vbscript)