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
.xlam
arquivos Chart Tools.xlam
e 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
customUI
e _rels
.
- Dentro de cada
customUI
pasta, crie um customUI.xml
arquivo. O customUI.xml
arquivo 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.xml
arquivo.
Meu customUI.xml
arquivo se Chart Tools.xlam
parece 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.xml
arquivo se Priveleged UDFs.xlam
parece 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
.zip
no nome do arquivo. No meu caso, mudei o nome Chart Tools.xlam
para Chart Tools.xlam.zip
e Privelged UDFs.xlam
para Priveleged UDFs.xlam.zip
.
- Abra cada
.zip
arquivo e navegue até a _rels
pasta. Copie o .rels
arquivo para a _rels
pasta 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 .rels
arquivo se Chart Tools.xlam
parece 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 .rels
arquivo se Priveleged UDFs
parece 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
.rels
arquivos em cada .zip
arquivo pelo (s) .rels
arquivo (s) que você modificou na etapa anterior.
- Copie e cole a
.customUI
pasta que você criou no diretório inicial dos .zip
arquivos / arquivos.
- Remova a
.zip
extensão do arquivo dos arquivos do Excel que você criou .
- Se você criou
.xlam
arquivos, 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
onAction
palavras-chave em meus botões. A onAction
palavra-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 onAction
palavra - chave. Isso é conhecido como retorno de chamada . Em meus .xlam
arquivos, tenho um módulo chamado, CallBacks
onde incluí minhas sub-rotinas de retorno de chamada.
Meu CallBacks
módulo para Chart Tools.xlam
parece
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 CallBacks
módulo para Priveleged UDFs.xlam
parece
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.xlam
e Priveleged UDFs.xlam
ambos têm acesso aos elementos com idQ
's igual a x:chartToolsTab
e x:privelgedUDFsTab
. Para que isso funcione, x:
é necessário, e, defini seu namespace na primeira linha do meu customUI.xml
arquivo <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
isMSO
palavra - chave. A seção Duas maneiras de personalizar a IU do Fluent no guia da Microsoft fornece mais detalhes.