Encontré dificultades con la solución de Roi-Kyi Bryant cuando varios complementos intentaron modificar la cinta. Tampoco tengo acceso de administrador en mi computadora de trabajo, lo que descartó instalar el Custom UI Editor
. Entonces, si está en el mismo barco que yo, aquí hay un ejemplo alternativo para personalizar la cinta usando solo Excel. Tenga en cuenta que mi solución se deriva de la guía de Microsoft .
- Cree archivos de Excel cuyas cintas desee personalizar. En mi caso, he creado dos
.xlam
archivos Chart Tools.xlam
y Priveleged UDFs.xlam
, para demostrar cómo varios complementos pueden interactuar con la cinta.
- Cree una carpeta, con cualquier nombre de carpeta, para cada archivo que acaba de crear.
- Dentro de cada una de las carpetas que ha creado, agregue una carpeta
customUI
y _rels
.
- Dentro de cada
customUI
carpeta, cree un customUI.xml
archivo. El customUI.xml
archivo detalla cómo interactúan los archivos de Excel con la cinta. La parte 2 de la guía de Microsoft cubre los elementos del customUI.xml
archivo.
Mi customUI.xml
archivo se Chart Tools.xlam
parece a esto
<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>
Mi customUI.xml
archivo se Priveleged UDFs.xlam
parece a esto
<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>
- Para cada archivo que creó en el Paso 1, agregue el sufijo a
.zip
a su nombre de archivo. En mi caso, cambié el nombre Chart Tools.xlam
a Chart Tools.xlam.zip
y Privelged UDFs.xlam
a Priveleged UDFs.xlam.zip
.
- Abra cada
.zip
archivo y navegue hasta la _rels
carpeta. Copie el .rels
archivo a la _rels
carpeta que creó en el Paso 3. Edite cada .rels
archivo con un editor de texto. De la guía de Microsoft
Entre el <Relationship>
elemento final y el <Relationships>
elemento de cierre
, agregue una línea que cree una relación entre el archivo del documento y el archivo de personalización. Asegúrese de especificar correctamente los nombres de carpeta y archivo.
<Relationship Type="http://schemas.microsoft.com/office/2006/
relationships/ui/extensibility" Target="/customUI/customUI.xml"
Id="customUIRelID" />
Mi .rels
archivo se Chart Tools.xlam
parece a esto
<?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>
Mi .rels
archivo de Priveleged UDFs
tiene este aspecto.
<?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>
- Reemplace los
.rels
archivos en cada .zip
archivo con el .rels
archivo / archivos que modificó en el paso anterior.
- Copie y pegue la
.customUI
carpeta que creó en el directorio de inicio del .zip
archivo / archivos.
- Elimine la
.zip
extensión de archivo de los archivos de Excel que creó .
- Si ha creado
.xlam
archivos, vuelva a Excel y agréguelos a sus complementos de Excel.
- Si corresponde, cree devoluciones de llamada en cada uno de sus complementos. En el paso 4, hay
onAction
palabras clave en mis botones. La onAction
palabra clave indica que, cuando se activa el elemento contenedor, la aplicación de Excel activará la subrutina entre comillas directamente después de la onAction
palabra clave. Esto se conoce como devolución de llamada . En mis .xlam
archivos, tengo un módulo llamado CallBacks
donde he incluido mis subrutinas de devolución de llamada.
Mi CallBacks
módulo se Chart Tools.xlam
parece a
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
Mi CallBacks
módulo se Priveleged UDFs.xlam
parece a
Opción explícita
Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.InitialisePrivelegedUDFs
End Sub
Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub
Los diferentes elementos tienen una firma de subrutina de devolución de llamada diferente. Para los botones, el parámetro de subrutina requerido es ByRef control As IRibbonControl
. Si no cumple con la firma de devolución de llamada requerida, recibirá un error al compilar su proyecto / proyectos de VBA. La parte 3 de la guía de Microsoft define todas las firmas de devolución de llamada.
Así es como se ve mi ejemplo terminado
Algunos consejos de cierre
- Si desea que los complementos compartan elementos de la cinta, use la palabra clave
idQ
y xlmns:
. En mi ejemplo, Chart Tools.xlam
y Priveleged UDFs.xlam
ambos tienen acceso a los elementos con idQ
's igual a x:chartToolsTab
y x:privelgedUDFsTab
. Para que esto funcione, el x:
que se requiere, y, he definido su espacio de nombres en la primera línea de mi customUI.xml
archivo, <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
. La sección Dos formas de personalizar la interfaz de usuario fluida en la guía de Microsoft ofrece más detalles.
- Si desea que los complementos accedan a los elementos de la cinta enviados con Excel, use la
isMSO
palabra clave. La sección Dos formas de personalizar la interfaz de usuario fluida en la guía de Microsoft ofrece más detalles.