Il blog di Gianni Giaccaglini

Blog su VBA e VSTO
Gianni Giaccaglini

My Links

News

NB - V. anche gli ARTICOLI (in fondo a questa barra)
Solo quesiti validi a: giannigiac@tin.it
Il mio Best seller su VBA
(v. www.hoepli.it)


Il mio ultimo libro su Open XML
(v. www.FAG.it):



La mia nipotina ELISA

Foto con dedica a ME di
Bill Gates giovanissimo
nei mitici anni 80!

Categorie Post

Categorie Articoli

Archivio

Immagini

Blog Stats

Scherzo da prete con la routine di chiusura di Excel

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

?>

posted on giovedì 12 gennaio 2006 22.55