Encontrei dificuldades com a solução de Roi-Kyi Bryant quando vários add-ins tentaram modificar a faixa de opções. Eu também não tenho acesso de administrador em meu computador de trabalho, o que descartou a instalação do Custom UI Editor. Portanto, se você estiver no mesmo barco que eu, aqui está um exemplo alternativo para personalizar a faixa de opções usando apenas o Excel. Observe, minha solução deriva do guia da Microsoft .
- Crie arquivo / arquivos do Excel cujas fitas você deseja personalizar. No meu caso, criei dois
.xlamarquivos Chart Tools.xlame Priveleged UDFs.xlam, para demonstrar como vários suplementos podem interagir com a Faixa de Opções.
- Crie uma pasta, com qualquer nome de pasta, para cada arquivo que você acabou de criar.
- Dentro de cada uma das pastas que você criou, adicione uma pasta
customUIe _rels.
- Dentro de cada
customUIpasta, crie um customUI.xmlarquivo. O customUI.xmlarquivo detalha como os arquivos do Excel interagem com a faixa de opções. A Parte 2 do guia da Microsoft cobre os elementos do customUI.xmlarquivo.
Meu customUI.xmlarquivo se Chart Tools.xlamparece com este
<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>
Meu customUI.xmlarquivo se Priveleged UDFs.xlamparece com este
<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 arquivo criado na Etapa 1, coloque o sufixo a
.zipno nome do arquivo. No meu caso, mudei o nome Chart Tools.xlampara Chart Tools.xlam.zipe Privelged UDFs.xlampara Priveleged UDFs.xlam.zip.
- Abra cada
.ziparquivo e navegue até a _relspasta. Copie o .relsarquivo para a _relspasta criada na Etapa 3. Edite cada .rels arquivo com um editor de texto. Do guia da Microsoft
Entre o <Relationship>elemento final e o <Relationships>elemento de fechamento
, adicione uma linha que crie um relacionamento entre o arquivo de documento e o arquivo de personalização. Certifique-se de especificar os nomes da pasta e do arquivo corretamente.
<Relationship Type="http://schemas.microsoft.com/office/2006/
relationships/ui/extensibility" Target="/customUI/customUI.xml"
Id="customUIRelID" />
Meu .relsarquivo se Chart Tools.xlamparece com este
<?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>
Meu .relsarquivo se Priveleged UDFsparece com este.
<?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>
- Substitua os
.relsarquivos em cada .ziparquivo pelo (s) .relsarquivo (s) que você modificou na etapa anterior.
- Copie e cole a
.customUIpasta que você criou no diretório inicial dos .ziparquivos / arquivos.
- Remova a
.zipextensão do arquivo dos arquivos do Excel que você criou .
- Se você criou
.xlamarquivos, de volta ao Excel, adicione-os aos suplementos do Excel.
- Se aplicável, crie retornos de chamada em cada um de seus add-ins. Na Etapa 4, existem
onActionpalavras-chave em meus botões. A onActionpalavra-chave indica que, quando o elemento que o contém é disparado, o aplicativo Excel irá disparar a sub-rotina entre aspas diretamente após a onActionpalavra - chave. Isso é conhecido como retorno de chamada . Em meus .xlamarquivos, tenho um módulo chamado, CallBacksonde incluí minhas sub-rotinas de retorno de chamada.

Meu CallBacksmódulo para Chart Tools.xlamparece
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
Meu CallBacksmódulo para Priveleged UDFs.xlamparece
Opção Explícita
Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.InitialisePrivelegedUDFs
End Sub
Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub
Elementos diferentes têm uma assinatura de sub-rotina de retorno de chamada diferente. Para botões, o parâmetro de sub-rotina necessário é ByRef control As IRibbonControl. Se você não estiver em conformidade com a assinatura de retorno de chamada exigida, receberá um erro ao compilar seu projeto / projetos VBA. A Parte 3 do guia da Microsoft define todas as assinaturas de retorno de chamada.
Aqui está a aparência do meu exemplo acabado

Algumas dicas de fechamento
- Se você deseja que os suplementos compartilhem elementos da Faixa de Opções, use a palavra
idQ- xlmns:chave e . No meu exemplo, o Chart Tools.xlame Priveleged UDFs.xlamambos têm acesso aos elementos com idQ's igual a x:chartToolsTabe x:privelgedUDFsTab. Para que isso funcione, x:é necessário, e, defini seu namespace na primeira linha do meu customUI.xmlarquivo <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">,. A seção Duas maneiras de personalizar a IU do Fluent no guia da Microsoft fornece mais detalhes.
- Se você deseja que os suplementos acessem os elementos da Faixa de Opções fornecidos com o Excel, use a
isMSOpalavra - chave. A seção Duas maneiras de personalizar a IU do Fluent no guia da Microsoft fornece mais detalhes.