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
.xlam
file Chart Tools.xlam
e 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
customUI
e _rels
.
- All'interno di ogni
customUI
cartella, crea un customUI.xml
file. Il customUI.xml
file descrive in dettaglio come i file Excel interagiscono con la barra multifunzione. La parte 2 della guida Microsoft copre gli elementi nel customUI.xml
file.
Il mio customUI.xml
file 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.xml
file 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
.zip
al nome del file. Nel mio caso, ho rinominato Chart Tools.xlam
in Chart Tools.xlam.zip
e Privelged UDFs.xlam
in Priveleged UDFs.xlam.zip
.
- Apri ogni
.zip
file e vai alla _rels
cartella. Copiare il .rels
file nella _rels
cartella 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 .rels
file 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 .rels
file 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
.rels
file in ogni .zip
file con il .rels
file / i file modificati nel passaggio precedente.
- Copia e incolla la
.customUI
cartella che hai creato nella directory home del .zip
file / file.
- Rimuovi l'
.zip
estensione del file dai file Excel che hai creato .
- Se hai creato
.xlam
file, 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
onAction
parole chiave nei miei pulsanti. La onAction
parola chiave indica che, quando l'elemento contenitore viene attivato, l'applicazione Excel attiverà la sub-routine racchiusa tra virgolette direttamente dopo la onAction
parola chiave. Questo è noto come callback . Nei miei .xlam
file, ho un modulo chiamato in CallBacks
cui ho incluso le mie sub-routine di callback.
Il mio CallBacks
modulo per Chart Tools.xlam
sembra
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 CallBacks
modulo per Priveleged UDFs.xlam
sembra
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
idQ
e xlmns:
. Nel mio esempio, Chart Tools.xlam
e Priveleged UDFs.xlam
entrambi hanno accesso agli elementi con idQ
's uguale a x:chartToolsTab
e x:privelgedUDFsTab
. Per questo al lavoro, la x:
si richiede, e, ho definito il suo spazio dei nomi nella prima riga del mio customUI.xml
file <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
isMSO
parola chiave. La sezione Two Ways to Customize the Fluent UI nella guida Microsoft fornisce alcuni dettagli in più.