Disattivare le barre strumenti = pericolo! (Office 2003)
Queste annotazioni si rivolgono a quanti ancora utilizzano Office 2003. Infatti, come ho fatto notare in un altro mio intervento, le precedenti barre strumenti default sono di fatto ignorate in Office 2007, ove tali funzionalità sono assorbite dalla nuova Barra multifunzione, alias Ribbon. Pertanto le routine che sto per descrivere sono, di fatto, ininfluenti nel nuovo ambiente (alla faccia della compatibilità? beh, così va il mondo...).
Sia come sia, ecco due tipiche routine per Excel, Word o altri applicativi dell'agonizzante banda 2003, la prima volta a sgombrare il campo da barre strumenti e altre sovrastrutture per dare massima visibilità e, insieme, inibire il maggior numero di comandi all'utente finale, la seconda per ripristinare la situazione normale, solitamente e auspicabilmente (v. tra poco) alla chiusura del documento.
Sub Disattivazione()
'Disattiva Barre
Dim CmdBar As CommandBar
For Each CmdBar in Application.CommandBars
CmdBar.Enabled = False
Next
'Altre disattivazioni
With ActiveWindow
.DisplayHeadings = False
.DisplayWorkbookTabs = False
End With
With Application
.DisplayFormulaBar = False
.DisplayStatusBar = False
.ShowWindowsInTaskbar = False
End With
End Sub
Sub Attivazione()
'Riattiva Barre
Dim CmdBar As CommandBar
For Each CmdBar in Application.CommandBars
CmdBar.Enabled = True
Next
'Altre riattivazioni
With ActiveWindow
.DisplayHeadings = True
.DisplayWorkbookTabs = True
End With
With Application
.DisplayFormulaBar = True
.DisplayStatusBar = True
.ShowWindowsInTaskbar = True
End With
End Sub
Nota - Si parla di modelli "chiusi", che gli inglesi definiscono come "dictatory application".
Focalizzando il discorso sulle barre va subito stigmatizzato un effetto collaterale indesiderato, probabilmente inatteso da chi ha escogitalo il ciclo
For Each CmdBar... Next :
se, disgraziatamente, per qualche interruzione imprevista Attivazione non v iene lanciata l'utente finale si trova a non più disporre di NESSUNA barra, inclusa quella del menu! Inutile infatti che costui si affanni col clic sull'area delle barre, non le vedrà più, neanche chiudendo e rilanciando Excel o Word.
Una brutta faccenda che, come si comprende, potrebbe nuocere alla popolarità dell'ingegnoso quanto incauto sviluppatore...
Primo rimedio (parziale)
Potrebbe consistere nell'occultare anziché disabilitare. In tal caso però - diosaperché, io no - la proprietà Visible = False non si lascia applicare alla barra dei menu, e chi si accontenta dovrebbe limitarsi al ciclo seguente:
'Nascondi Barre (tranne quella dei menu)
Dim i As Integer
For i = 1 to Application.CommandBars.Count
CommandBars(i).Visible = False
Next
Secondo rimedio (un po' migliore)
Agli amanti dei modelli dittatoriali, di sicuro insoddisfatti della soluzione appena vista, suggerisco infine di aggiungere l'istruzione seguente:
CommandBars("File").Enabled = False
che disabilita il solo menu File, ostacolando operazioni di salvataggio e stampa da parte dell'utente non programmate dal codice VBA. Infatti stavolta alla chiurura del modello anche in assenza dell'istruzione riabilitante
CommandBars("File").Enabled = True il menu
File torna attivo e pimpante.
Nota - Ovviamente stiamo parlando di palliativi, a fronte dei comandi manuali che restano invita, come
Maiusc +
F12 per salvare file.