I virus da macro, come è noto, fanno principalmente leva sulle routine di apertura di un documento, soprattutto di Word, che entrano automaticamente in ballo all’apertura del file. Le procedure tradizionali del genere sono Auto_open o il sinonimo italiano, Auto_apri che ha lo stesso effetto (analogamente Auto_close e Auto_Chiudi, alla chiusura).
Lo stesso mestiere è svolto dalla più moderna routine Workbook_Open di Excel o Document_Open di Word..
All'utente imprudente che apre un file .XLS o .DOC "attaccato" a un e-mail senza prevedere, preliminarmente, di impostare il livello MOLTO ELEVATO di protezione da macro (il comando, ricordo, è Strumenti > Macro > Protezione... ecc.) glie ne possono capitare di tutti i colori. Inclusa la distruzione di archivi! Verificare, nei casi più sospetti, la presenza o meno della perigliosa istruzione Kill che nessun antivirus, ch'io sappia, pensa di bloccare!
Analoghi attacchi maliziosi, diciamo così, a scoppio ritardato potrebbero verificarsi da hacker che sfruttano l'evento di chiusura di un file Excel o Word.
Lo scherzo pretesco
Più benignamente si possono fare ad amici, conoscenti e... persone antipatiche scherzi di vario tipo, ad esempio in combutta con gli eventi di Excel che si scatenano sulla selezione o sulla modifica di una cella. Ne parlerò un giorno o l'altro.
Qui invece propongo la seguente semplicissima routine nel modulo ThisWorkbook di una cartella di lavoro, magari priva di ogni altra cosa:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True
End Sub
Conseguenza: chi dovesse aprire un file del genere non riuscirà più a chiudere né il documento e nemmeno Excel! Provare per credere e farsene una ragione. Inutile aggiungere che se si colloca tale sconcio modello nella directory \Start magari vuoto e col nome anonimo Cartel1.xls per il massimo inganno il poveretto si trova nell’inspiegabile situazione ogni volta che carica Excel. Per favore, aiutatelo al più presto eliminando l’istruzione Cancel = True e, meglio ancora, distruggendo il dannato modello.
Il perfido scherzo non funziona con Word, la cui routine d'evento, Close, non ha l'argomento Cancel.
Qualcuno, infine, si chiederà a che serve lo strano argomento Cancel. Esso, per default è pari a False (ci mancherebbe!) e fissarlo a True può servire in casi particolari in cui si vuol costringere l'utente a completare un certo lavoro. Per fissare le idee immaginiamo che una cella di nome "FineLav" sia tale che essa contiene VERO quando, per l'appunto, l'utente ha fatto tutto quel che gli si chiede. In tal caso ecco una possibile, ragionevole, routine di chiusura:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not Range("FineLavoro").Value Then
Cancel = True
MsgBox "Completa i dati, Ciccio!"
Else
Cancel = False
End If
End Sub
?>