Come aggiungere una scheda della barra multifunzione personalizzata utilizzando VBA?


98

Sto cercando un modo per aggiungere una scheda personalizzata nella barra multifunzione di Excel che conterrebbe alcuni pulsanti. Mi sono imbattuto in alcune risorse che lo affrontano tramite Google ma sembrano tutte losche e scandalosamente complicate.

Qual è un modo semplice e veloce per farlo? Vorrei che la nuova scheda venisse caricata quando il mio VBA viene caricato in Excel ..

AGGIORNAMENTO : ho provato questo esempio da qui ma ricevo un errore "oggetto richiesto" nell'ultima istruzione:

Public Sub AddHighlightRibbon()
Dim ribbonXml As String

ribbonXml = "<mso:customUI xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">"
ribbonXml = ribbonXml + "  <mso:ribbon>"
ribbonXml = ribbonXml + "    <mso:qat/>"
ribbonXml = ribbonXml + "    <mso:tabs>"
ribbonXml = ribbonXml + "      <mso:tab id=""highlightTab"" label=""Highlight"" insertBeforeQ=""mso:TabFormat"">"
ribbonXml = ribbonXml + "        <mso:group id=""testGroup"" label=""Test"" autoScale=""true"">"
ribbonXml = ribbonXml + "          <mso:button id=""highlightManualTasks"" label=""Toggle Manual Task Color"" "
ribbonXml = ribbonXml + "imageMso=""DiagramTargetInsertClassic"" onAction=""ToggleManualTasksColor""/>"
ribbonXml = ribbonXml + "        </mso:group>"
ribbonXml = ribbonXml + "      </mso:tab>"
ribbonXml = ribbonXml + "    </mso:tabs>"
ribbonXml = ribbonXml + "  </mso:ribbon>"
ribbonXml = ribbonXml + "</mso:customUI>"

ActiveProject.SetCustomUI (ribbonXml)
End Sub

Conferma quale versione di Excel stai utilizzando?
Siddharth Rout

Questo è per Project.
Nathan_Sav

Risposte:


146

AFAIK non è possibile utilizzare VBA Excel per creare una scheda personalizzata nella barra multifunzione di Excel. È tuttavia possibile nascondere / rendere visibile un componente della barra multifunzione utilizzando VBA. Inoltre, il collegamento che hai menzionato sopra è per MS Project e non per MS Excel.

Creo schede per le mie applicazioni / componenti aggiuntivi di Excel utilizzando questa utilità gratuita chiamata Editor dell'interfaccia utente personalizzata .


Modifica: per soddisfare la nuova richiesta di OP

Tutorial

Ecco un breve tutorial come promesso:

  1. Dopo aver installato l'Editor UI personalizzato (CUIE), aprilo e fai clic su File | Apri e seleziona il file Excel pertinente. Assicurati che il file Excel sia chiuso prima di aprirlo tramite CUIE. Sto usando un foglio di lavoro nuovo di zecca come esempio.

    inserisci qui la descrizione dell'immagine

  2. Fare clic con il tasto destro come mostrato nell'immagine sottostante e fare clic su "Parte dell'interfaccia utente personalizzata di Office 2007". Inserirà "customUI.xml"

    inserisci qui la descrizione dell'immagine

  3. Avanti Fare clic sul menu Inserisci | XML di esempio | Scheda personalizzata. Noterai che il codice di base viene generato automaticamente. Ora sei pronto per modificarlo secondo le tue esigenze.

    inserisci qui la descrizione dell'immagine

  4. Controlliamo il codice

    inserisci qui la descrizione dell'immagine

    label="Custom Tab": Sostituisci "Scheda personalizzata" con il nome che desideri assegnare alla scheda. Per il momento chiamiamolo "Jerome".

    La parte sottostante aggiunge un pulsante personalizzato.

    <button id="customButton" label="Custom Button" imageMso="HappyFace" size="large" onAction="Callback" />

    imageMso: Questa è l'immagine che verrà visualizzata sul pulsante. "HappyFace" è quello che vedrai in questo momento. Puoi scaricare altri ID immagine qui .

    onAction="Callback": "Callback" è il nome della procedura che viene eseguita quando si fa clic sul pulsante.

Demo

Con ciò, creiamo 2 pulsanti e chiamiamoli "Pulsante JG 1" e "Pulsante JG 2". Manteniamo la faccia felice come l'immagine della prima e teniamo il "Sole" per la seconda. Il codice modificato ora ha questo aspetto:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="MyCustomTab" label="Jerome" insertAfterMso="TabView">
<group id="customGroup1" label="First Tab">
<button id="customButton1" label="JG Button 1" imageMso="HappyFace" size="large" onAction="Callback1" />
<button id="customButton2" label="JG Button 2" imageMso="PictureBrightnessGallery" size="large" onAction="Callback2" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

Elimina tutto il codice che è stato generato in CUIE e quindi incolla il codice sopra al posto di quello. Salva e chiudi CUIE. Ora quando apri il file Excel sarà simile a questo:

inserisci qui la descrizione dell'immagine

Ora la parte di codice. Apri l'editor VBA, inserisci un modulo e incolla questo codice:

Public Sub Callback1(control As IRibbonControl)

    MsgBox "You pressed Happy Face"

End Sub

Public Sub Callback2(control As IRibbonControl)

    MsgBox "You pressed the Sun"

End Sub

Salva il file Excel come file abilitato per le macro. Ora quando fai clic sullo Smiley o sul Sole vedrai la relativa finestra di messaggio:

inserisci qui la descrizione dell'immagine

Spero che questo ti aiuti!


6
Sì :) Ron ha molti esempi nel suo sito web. rondebruin.nl/ribbon.htm
Siddharth Rout

1
Vuoi creare una nuova scheda? Se sì, fornisci maggiori dettagli e ti darò il codice XML :)
Siddharth Rout

1
Dammi 20 minuti. Aggiornamento del post sopra con codice e istantanee pertinenti :)
Siddharth Rout

6
@SiddharthRout +1 - Sto scoprendo che non ho bisogno di libri Excel, segui i tuoi post per quello che ho bisogno di imparare in un giorno di lavoro (e questa sera, è il Ribbon XML!) :)
nostro uomo in Banane

1
Consiglierei di creare una nuova domanda con il tuo codice XML di base e il codice VBA e poi possiamo prenderlo da lì? @YasserKhalil
Siddharth Rout,

30

Sono stato in grado di farlo con VBA in Excel 2013. Non sono necessari editor speciali. Tutto ciò di cui hai bisogno è l'editor di codice Visual Basic a cui puoi accedere dalla scheda Sviluppatore. La scheda Sviluppatore non è visibile per impostazione predefinita, quindi deve essere abilitata in File> Opzioni> Personalizza barra multifunzione. Nella scheda sviluppo fare clic sul pulsante Visual Basic. L'editor del codice verrà avviato. Fare clic con il tasto destro nel riquadro Esplora progetti a sinistra. Fai clic sul menu Inserisci e scegli il modulo. Aggiungi entrambi i sottotitoli di seguito al nuovo modulo.

Sub LoadCustRibbon()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI      xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + "  <mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "      <mso:tab id='reportTab' label='Reports' insertBeforeQ='mso:TabFormat'>" & vbNewLine
ribbonXML = ribbonXML + "        <mso:group id='reportGroup' label='Reports' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + "          <mso:button id='runReport' label='PTO' "   & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor3'      onAction='GenReport'/>" & vbNewLine
ribbonXML = ribbonXML + "        </mso:group>" & vbNewLine
ribbonXML = ribbonXML + "      </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + "    </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "  </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"

ribbonXML = Replace(ribbonXML, """", "")

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Sub ClearCustRibbon()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI           xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">" & _
"<mso:ribbon></mso:ribbon></mso:customUI>"

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Chiama il sub LoadCustRibbon nel Wookbook open even e chiama il sub ClearCustRibbon nell'evento Before_Close del file di codice ThisWorkbook.


Questo ha funzionato per me, ma con solo un paio di problemi minori in cui mi sono imbattuto. 1) Se ho mantenuto l'evento Before_Close, il nuovo nastro non è stato caricato. 2) Quando sono riuscito a far funzionare la barra multifunzione rimuovendo l'evento Before_Close, ho dovuto ricaricare Excel prima che apparisse. Se potessi consigliare perché sta succedendo, sarebbe fantastico!
Petay87

Il codice è esattamente lo stesso? Puoi postarlo? L'idea è che Excel dovrebbe modificare il file della barra multifunzione standard prima che la barra multifunzione venga caricata e ripristinarla prima che la cartella di lavoro venga chiusa. Il ripristino della barra multifunzione è necessario in modo che non venga visualizzato in altre cartelle di lavoro.
Roi-Kyi Bryant

3
Questo codice sovrascrive tutte le personalizzazioni della barra multifunzione correnti che l'utente potrebbe aver già effettuato.
WizzleWuzzle

@ WizzleWuzzle Non è necessario. Il nastro potrebbe essere importato e analizzato in un oggetto che potrebbe essere attraversato. Nuovi elementi potrebbero quindi essere aggiunti all'oggetto. Il risultato potrebbe essere salvato in un file. La domanda era come creare un nastro personalizzato; non come modificarne uno esistente.
Roi-Kyi Bryant

1
@ Roi-Kyi-Bryant La domanda era di aggiungere un elemento del nastro personalizzato, non sovrascrivere l'intero nastro personalizzato corrente. Questo codice sovrascrive la barra multifunzione corrente.
WizzleWuzzle

24

Ho lottato come un matto, ma questa è effettivamente la risposta giusta. Per quello che vale, quello che mi mancava è questo:

  1. Come altri dicono, non è possibile creare il nastro CustomUI con VBA, tuttavia , non è necessario!
  2. L'idea è di creare il codice della barra multifunzione xml utilizzando File di Excel> Opzioni> Personalizza barra multifunzione, quindi esportare la barra multifunzione in un file .customUI (è solo un file txt, con xml in esso)
  3. Ora arriva il trucco : puoi includere il codice .customUI nel tuo file .xlsm usando lo strumento MS a cui si riferiscono qui, copiando il codice dal file .customUI
  4. Una volta incluso nel file .xlsm, ogni volta che lo apri, il nastro che hai definito viene aggiunto al nastro dell'utente, ma usa <ribbon startFromScratch = "false"> o perdi il resto del nastro. All'uscita dalla cartella di lavoro, il nastro viene rimosso.
  5. Da qui in poi è semplice, crea il tuo nastro, copia il codice xml specifico per il tuo nastro dal file .customUI e posizionalo in un wrapper come mostrato sopra (... <tabs> your xml </ tabs .. .)

A proposito, la pagina che lo spiega sul sito di Ron è ora all'indirizzo http://www.rondebruin.nl/win/s2/win002.htm

Ed ecco il suo esempio su come abilitare / disabilitare i pulsanti sulla barra multifunzione http://www.rondebruin.nl/win/s2/win013.htm

Per altri esempi xml di nastri, vedere anche http://msdn.microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx


2
Ancora (5 anni dopo) la migliore risposta secondo me e forse OP @BuZz vorrebbe aggiornare il post originale, indicando almeno questa risposta (?). L'ho trovato a malapena perché giaceva in fondo a una lista piuttosto lunga di risposte.
Chri.s

18

Le risposte qui sono specifiche per l'utilizzo dell'editor dell'interfaccia utente personalizzata. Ho passato un po 'di tempo a creare l'interfaccia senza quel meraviglioso programma, quindi sto documentando la soluzione qui per aiutare chiunque altro a decidere se ha bisogno di quell'editor dell'interfaccia utente personalizzato o meno.

Mi sono imbattuto nella seguente pagina Web della guida di Microsoft: https://msdn.microsoft.com/en-us/library/office/ff861787.aspx . Questo mostra come impostare manualmente l'interfaccia, ma ho avuto qualche problema quando ho puntato al mio codice aggiuntivo personalizzato.

Per far funzionare i pulsanti con le tue macro personalizzate, imposta la macro nei tuoi sottotitoli .xlam in modo che venga chiamata come descritto in questa risposta SO - Chiamare una macro Excel dalla barra multifunzione . Fondamentalmente, dovrai aggiungere quel parametro "control As IRibbonControl" a qualsiasi modulo puntato dal tuo xml della barra multifunzione. Inoltre, il tuo xml della barra multifunzione dovrebbe avere la sintassi onAction = "myaddin! Mymodule.mysub" per chiamare correttamente tutti i moduli caricati dal componente aggiuntivo.

Utilizzando queste istruzioni sono stato in grado di creare un componente aggiuntivo Excel (file .xlam) che ha una scheda personalizzata caricata quando il mio VBA viene caricato in Excel insieme al componente aggiuntivo. I pulsanti eseguono il codice dal componente aggiuntivo e la scheda personalizzata si disinstalla quando Rimuovo il componente aggiuntivo.


1
Questo funziona per quelli di noi che non hanno tutti gli strumenti di sviluppo. Grazie per la soluzione "semplice"
Evan

2
Insegnavo questo metodo ai miei studenti di programmazione del secondo anno, ma alla fine ho scoperto che usare lo strumento CustomUI è semplicemente meno complicato se puoi accedervi.
Rick Henderson

8

Oltre alla risposta di Roi-Kyi Bryant, questo codice funziona completamente in Excel 2010. Premere ALT + F11 e verrà visualizzato l'editor VBA. Fare doppio clic sul ThisWorkbooklato sinistro, quindi incollare questo codice:

Private Sub Workbook_Activate()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI      xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + "  <mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "      <mso:tab id='reportTab' label='My Actions' insertBeforeQ='mso:TabFormat'>" & vbNewLine
ribbonXML = ribbonXML + "        <mso:group id='reportGroup' label='Reports' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + "          <mso:button id='runReport' label='Trim' " & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor3'      onAction='TrimSelection'/>" & vbNewLine
ribbonXML = ribbonXML + "        </mso:group>" & vbNewLine
ribbonXML = ribbonXML + "      </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + "    </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "  </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"

ribbonXML = Replace(ribbonXML, """", "")

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Private Sub Workbook_Deactivate()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI           xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">" & _
"<mso:ribbon></mso:ribbon></mso:customUI>"

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Non dimenticare di salvare e riaprire la cartella di lavoro. Spero che questo ti aiuti!


Come faresti a passare le discussioni con questo? L'ho usato, ma non riesco a trovare un modo per passare gli argomenti.
jDave1984

Usando la mia risposta, aggiungeresti un elenco di argomenti a ciascuna sottoprogramma Qualcosa come LoadCustomRibbon (tabName as String, groupName as String, btnName as String). Quindi chiama quelle routine secondarie nel posto appropriato come ha sottolineato @Erikas.
Roi-Kyi Bryant

6

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 .


  1. 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.
  2. Crea una cartella, con qualsiasi nome di cartella, per ogni file appena creato.
  3. All'interno di ciascuna delle cartelle che hai creato, aggiungi una cartella customUIe _rels.
  4. 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>
  1. 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.
  2. 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>
  1. Sostituisci i .relsfile in ogni .zipfile con il .relsfile / i file modificati nel passaggio precedente.
  2. Copia e incolla la .customUIcartella che hai creato nella directory home del .zipfile / file.
  3. Rimuovi l' .zipestensione del file dai file Excel che hai creato .
  4. Se hai creato .xlamfile, di nuovo in Excel, aggiungili ai componenti aggiuntivi di Excel.
  5. 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.

Modulo CallBacks

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

Prodotto finito


Alcuni suggerimenti di chiusura

  1. 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ù.
  2. 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ù.

0

Un altro approccio a questo sarebbe scaricare il modulo di classe Open XML gratuito di Jan Karel Pieterse da questa pagina: Modifica di elementi in un file OpenXML utilizzando VBA

Con questo aggiunto al tuo progetto VBA, puoi decomprimere il file Excel, utilizzare VBA per modificare l'XML, quindi utilizzare la classe per decomprimere i file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.