Ho riscontrato difficoltà con la soluzione di Roi-Kyi Bryant quando più componenti aggiuntivi hanno tentato di modificare la barra multifunzione. Inoltre non ho accesso come amministratore sul mio computer di lavoro, il che ha escluso l'installazione di Custom UI Editor. Quindi, se sei nella mia stessa barca, ecco un esempio alternativo per personalizzare la barra multifunzione utilizzando solo Excel. Nota, la mia soluzione è derivata dalla guida di Microsoft .
- Crea file / file Excel di cui desideri personalizzare i nastri. Nel mio caso, ho creato due
.xlamfile Chart Tools.xlame Priveleged UDFs.xlam, per dimostrare come più componenti aggiuntivi possono interagire con la barra multifunzione.
- Crea una cartella, con qualsiasi nome di cartella, per ogni file appena creato.
- All'interno di ciascuna delle cartelle che hai creato, aggiungi una cartella
customUIe _rels.
- All'interno di ogni
customUIcartella, crea un customUI.xmlfile. Il customUI.xmlfile descrive in dettaglio come i file Excel interagiscono con la barra multifunzione. La parte 2 della guida Microsoft copre gli elementi nel customUI.xmlfile.
Il mio customUI.xmlfile per Chart Tools.xlamè simile a questo
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
<ribbon>
<tabs>
<tab idQ="x:chartToolsTab" label="Chart Tools">
<group id="relativeChartMovementGroup" label="Relative Chart Movement" >
<button id="moveChartWithRelativeLinksButton" label="Copy and Move" imageMso="ResultsPaneStartFindAndReplace" onAction="MoveChartWithRelativeLinksCallBack" visible="true" size="normal"/>
<button id="moveChartToManySheetsWithRelativeLinksButton" label="Copy and Distribute" imageMso="OutlineDemoteToBodyText" onAction="MoveChartToManySheetsWithRelativeLinksCallBack" visible="true" size="normal"/>
</group >
<group id="chartDeletionGroup" label="Chart Deletion">
<button id="deleteAllChartsInWorkbookSharingAnAddressButton" label="Delete Charts" imageMso="CancelRequest" onAction="DeleteAllChartsInWorkbookSharingAnAddressCallBack" visible="true" size="normal"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Il mio customUI.xmlfile per Priveleged UDFs.xlamè simile a questo
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
<ribbon>
<tabs>
<tab idQ="x:privelgedUDFsTab" label="Privelged UDFs">
<group id="privelgedUDFsGroup" label="Toggle" >
<button id="initialisePrivelegedUDFsButton" label="Activate" imageMso="TagMarkComplete" onAction="InitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
<button id="deInitialisePrivelegedUDFsButton" label="De-Activate" imageMso="CancelRequest" onAction="DeInitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
</group >
</tab>
</tabs>
</ribbon>
</customUI>
- Per ogni file creato nel passaggio 1, aggiungi il suffisso a
.zipal nome del file. Nel mio caso, ho rinominato Chart Tools.xlamin Chart Tools.xlam.zipe Privelged UDFs.xlamin Priveleged UDFs.xlam.zip.
- Apri ogni
.zipfile e vai alla _relscartella. Copiare il .relsfile nella _relscartella creata al passaggio 3. Modificare ogni .rels file con un editor di testo. Dalla guida Microsoft
Tra l' <Relationship>elemento finale e l' <Relationships>elemento di chiusura
, aggiungi una linea che crei una relazione tra il file del documento e il file di personalizzazione. Assicurati di specificare correttamente la cartella ei nomi dei file.
<Relationship Type="http://schemas.microsoft.com/office/2006/
relationships/ui/extensibility" Target="/customUI/customUI.xml"
Id="customUIRelID" />
Il mio .relsfile per Chart Tools.xlamè simile a questo
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
<Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="chartToolsCustomUIRel" />
</Relationships>
Il mio .relsfile per Priveleged UDFsè simile a questo.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
<Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="privelegedUDFsCustomUIRel" />
</Relationships>
- Sostituisci i
.relsfile in ogni .zipfile con il .relsfile / i file modificati nel passaggio precedente.
- Copia e incolla la
.customUIcartella che hai creato nella directory home del .zipfile / file.
- Rimuovi l'
.zipestensione del file dai file Excel che hai creato .
- Se hai creato
.xlamfile, di nuovo in Excel, aggiungili ai componenti aggiuntivi di Excel.
- Se applicabile, crea callback in ciascuno dei tuoi componenti aggiuntivi. Nel passaggio 4, ci sono
onActionparole chiave nei miei pulsanti. La onActionparola chiave indica che, quando l'elemento contenitore viene attivato, l'applicazione Excel attiverà la sub-routine racchiusa tra virgolette direttamente dopo la onActionparola chiave. Questo è noto come callback . Nei miei .xlamfile, ho un modulo chiamato in CallBackscui ho incluso le mie sub-routine di callback.

Il mio CallBacksmodulo per Chart Tools.xlamsembra
Option Explicit
Public Sub MoveChartWithRelativeLinksCallBack(ByRef control As IRibbonControl)
MoveChartWithRelativeLinks
End Sub
Public Sub MoveChartToManySheetsWithRelativeLinksCallBack(ByRef control As IRibbonControl)
MoveChartToManySheetsWithRelativeLinks
End Sub
Public Sub DeleteAllChartsInWorkbookSharingAnAddressCallBack(ByRef control As IRibbonControl)
DeleteAllChartsInWorkbookSharingAnAddress
End Sub
Il mio CallBacksmodulo per Priveleged UDFs.xlamsembra
Opzione esplicita
Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.InitialisePrivelegedUDFs
End Sub
Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub
Elementi diversi hanno una firma di sottoprogramma di richiamata diversa. Per i pulsanti, il parametro della sottoprogramma richiesto è ByRef control As IRibbonControl. Se non sei conforme alla firma di callback richiesta, riceverai un errore durante la compilazione del tuo progetto / progetti VBA. La parte 3 della guida Microsoft definisce tutte le firme di callback.
Ecco come appare il mio esempio finito

Alcuni suggerimenti di chiusura
- Se desideri che i componenti aggiuntivi condividano gli elementi della barra multifunzione, utilizza la parola chiave
idQe xlmns:. Nel mio esempio, Chart Tools.xlame Priveleged UDFs.xlamentrambi hanno accesso agli elementi con idQ's uguale a x:chartToolsTabe x:privelgedUDFsTab. Per questo al lavoro, la x:si richiede, e, ho definito il suo spazio dei nomi nella prima riga del mio customUI.xmlfile <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">. La sezione Two Ways to Customize the Fluent UI nella guida Microsoft fornisce alcuni dettagli in più.
- Se si desidera che i componenti aggiuntivi accedano agli elementi della barra multifunzione forniti con Excel, utilizzare la
isMSOparola chiave. La sezione Two Ways to Customize the Fluent UI nella guida Microsoft fornisce alcuni dettagli in più.