Menu

Personalizzazione del Ribbon, rivisitata

La barra multifunzione di Office, alias Ribbon, introdotta fin dalla versione 2007 è oggi più che familiare agli utenti. Nel frattempo si è persa di vista la possibilità di personalizzarla,specie in particolari documenti o modelli più o meno chiusi per l’utente finale. Confesso che ciò vale in particolare per chi scrive, a causa della macchinosità delle operazioni che, per giunta, non si possono automatizzare con codice macro, essendo il Ribbon un oggetto XML. In questo post ho comunque deciso di ripescare, ampliandolo, un mio precedente articolo, nato nel 2007 quando il Ribbon fu per la prima volta adottato. La trattazione (quasi) completa.

di Gianni Giaccaglini

In un precedente post su questo blog ho illustrato la possibilità di celare l’invadente Ribbon in Excel coi comandi che qui ripeto:

'Il Ribbon sparisce: Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
'Il Ribbon riappare: Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"

Una misura così estremistica ha suscitato qualche critica, così ho deciso di pubblicare nuovamente informazioni piuttosto dettagliate sull’argomento, visto che oltretutto il trucco precedente non si applica a Word o PowerPoint.

Office 2007 ha sostituito le molte precedenti barre strumenti (Commandbar) con un’unica barra multifunzione,in inglese Ribbon User Interface, abbreviato Ribbon UI. Le sole commandbar personali restano in vita, rese però obsolete da una tecnologia RibbonX (sta per Ribbon Extensibility), che descrive in linguaggio XML le caratteristiche di un ribbon personalizzato in un file customUI.xml, componente incorporato – almeno con Word, Excel e PowerPoint - in uno dato documento macro-enabled (xlsm, in Excel, docm in Word) o in un add-in (xlam in Excel) o un template Word dotm, secondo la famosa struttura open xml adottata da Microsoft con Office 2007.

RibbonX consente multiformi, camaleontiche metamorfosi della nuova interfaccia utente (gli Autori Microsoft parlano di “fluent ribbon interface”) la cui natura XML fa sì che per tali personalizzazioni può bastare il Blocco Note. Occorre però apprendere la sintassi dei tag descrittori dei componenti del Ribbon, strutturati gerarchicamente: si va dalle tab (schede) ai group (gruppi in cui si articolano le schede) fino ai control (controlli: pulsanti, caselle ecc.) cui si possono associare le cosiddette callback routine.

Si può così stravolgere sia il volto che le funzionalità, aggiunte o ridefinite, del ribbon. Le routine callback si possono scrivere in VBA (Visual Basic for application, le macro tradizionali) o C# (in ambito VSTO, Visual StudioTools per Office) e in questa sede di VBA ci occuperemo, per il suo più immediato utilizzo e perché identica è la natura e struttura di un archivio customUI.xml.

In medias res con un semplicissimo esempio

Proponiamoci l’aggiunta, in una cartella Excel macro enabled, di una tab (scheda) personale che si affianchi alle altre del ribbon, composta da un solo group (gruppo) comprendente due button (pulsanti di comando), ciascuno scatenante una determinata macro da noi creata.

Anticipazione importante. Prima di descrivere le operazioni da compiere, mi preme svelare che il passo 1 si può evitare compiendo direttamente la digitazione di cui al passo 2 nella finestra del Custom UI Editor, evitando anche altre noie relative ai passi da 4 in poi. Ne parlerò più avanti, comunque chi ha fretta può scaricare tale utile utility da questo sito, ove ne vengono descritte le peculiarità:

http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2006/05/26/customuieditor.aspx

Chi ha fretta può farlo direttamente da qui (NB: prima di communityserver c’è l’underscore _ ):
http://openxmldeveloper.org/cfs-file.ashx/_communityserver-components-postattachments/00-00-72-93/officecustomUIEditorSetup.zip

Procediamo con la prassi normale, che ha il pregio di chiarire bene quel che accade.
Creare un file customUI.xml, con un editor di testo XML o anche il semplice Notepad.
digitandovi questo codice XML:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="PersonTab" label="Mia Tab" insertAfterMso="TabHome">
<group id="PersonGruppo" label="Mio Gruppo">
<button id="Puls1" size="large" tag="OraAttuale" label="Segnala l’ora" onAction="SegnalaOra" />
<button id="Puls2" size="large" tag="LanciaUserForm" label="Lancia UserForm" onAction="LanciaUserForm" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

NOTA. La direttiva iniziale potrebbe recare Office/2009/07 in luogo di Office/2006/01 supportando così speciali novità di Office 2010/2013. Ma è una sottigliezza per espertissimi.

Creare una cartella Excel PrimaProva.xlsm, e nell’Editor VBA inserire le macro seguenti, più una UserForm1 a piacere.

Sub SegnalaOra(ByVal controllo As IRibbonControl)
msg = "Ore " & Hour(Time) & " e " & Minute(Time) & " minuti"
'Indica l’orario e il nome del pulsante
MsgBox msg, vbInformation, controllo.Tag
End Sub

Sub LanciaUserForm(ByVal controllo As IRibbonControl)
'Richiama la UserForm...
Load UserForm1
UserForm1.Show
End Sub

Sono le Sub associate ai controlli Button1 e Button2 descritti nel customUI.xlm, il cui compito è ovvio, ma senza dimenticare l’argomento controllo, di ben preciso tipo IRibbonControl altrimenti la macro fallisce.

Chiudere PrimaProva.xlsmemodificarne l’estensione .xlsm in .zip, poi con manovre date per note, aggiungervi il predetto customUI.xml.

Aprire la cartella _rels e aggiungere le righe seguenti prima dellatagfinaledelle Relationships,una direttiva che indica il “target” che descrive il ribbon personale:
<relationship Id="someID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml" />

NOTA. Si può pensare di sostituire customUI.xml con un nome diverso, ma è da sconsigliare specie se si usa l’editor ad hoc (v. più avanti).
Chiudere il file .zip e ripristinarne l’estensione originaria .xlsm.

Alla riapertura di PrimaProva.xlsm si noterà la neonata Mia Tab, col gruppo etichettato "Mio Gruppo" che mostra due grossi pulsanti, corredati dalle label previste. Cliccando sull’uno o sull’altro otterremo quel che promettono.

Ciascuno potrà progettare una Userform1 di suo gusto oppure modificare le macro senza toccare il customUI.xlm. E una volta creato e incorporato quest’ultimo, le routine associate si possono modificare, in particolare per le eventuali UserForm richiamate.

Tab personali con pochi pulsanti soddisfano i casi normali della vita, per cui si può pensare di predisporre una serie di file customUI.xml tipici da adattare a varie esigenze per inserirli in questo o quel documento. Qui conviene poi anticipare la possibilità di salvare un file macro enabled che incorpora un customUI.xml d’uso generale in forma di add-in (.xlam), poi richiamabile in un qualsiasi file .xlsm (o .docm) che così assume quella particolare interfaccia utente senza avere in pancia un (proprio) customUI.xml.

L’articolo completo in formato PDF si può scaricare da: http://www.giannigiaccaglini.it/download/Ribbonpersonaleperoffice.pdf

 

Ultima modifica ilSabato, 05 Aprile 2014 15:11

Aggiungi commento


Codice di sicurezza
Aggiorna

Torna in alto