Site da Vetorial Treinamentos

Como programar a Ribbon e Backstage do Ecel com XML e VBA

Como programar a Ribbon do Excel com XML e VBA

É tarefa de todo desenvolvedor levar aos usuários maneiras fáceis de selecionar recursos e comandos em qualquer aplicativo. Não importa se você levou meses escrevendo linhas e mais linhas de códigos para para desenvolver uma aplicação. Depois de escrever todos os procedimentos VBA, você deve dedicar o tempo que for necessário adicionando recursos que facilitem o trabalho dos usuários. Fazendo isso, seu aplicativo será rápido e fácil de usar.

A melhor forma de criar uma Interface de Usuário (UI) agradável no Excel é através da personalização da Ribbon, onde é possível criar e manipular as Guias (Tabs), Grupos (Groups), e diversos tipos de controles diferentes que podem ser aplicados dependendo da operação que se necessita realizar.

O objetivo desse post é ensinar você como programar a Ribbon do Excel à partir da manipulação da estrutura XML que a forma. Além disso, iremos utilizar o VBA para executar tarefas ao interagir com os controles criados dentro da Ribbon de forma programática.

 

Capítulos

Visão Geral da Interface Ribbon do Excel

A Ribbon é formada pela Faixa de Opções, onde também está presente a barra de título, a Barra de Ferramentas de acesso rápido e as Guias (Tabs). As Guias por sua vez, são formadas por um ou mais Grupos, e cada grupo consiste em um ou mais controles.

Ribbon do exel com faixa de opões e guias

Dentro dos grupos da Ribbon de uma pasta de trabalho comum do Excel é possível notar a presença de muitos controles diferentes, cada um desses controles nos fornece acesso a uma tarefa específica, mas sempre visando o mesmo objetivo, tornar a navegação do usuário a mais fácil possível.

Toda essa variedade de Guias, grupos e controles, possibilita aos usuários criarem uma infinidade de operações, cálculos matemáticos, gráficos, enfim, projetos de praticamente todos os tipos. Porém, em muitos casos, após desenvolver uma aplicação para uma finalidades especifica, torna-se necessário o uso somente dos comandos desejáveis para aplicação criada. Um exemplo, seria a criação de um sistema de caixa. Nesse caso, deixar o usuário com acesso a todos os comandos nativos do Excel pode acabar sendo um problema maior. É aí que entra a necessidade de customização da Ribbon, em outras palavras, é necessário criar os próprios recursos e controles para essa finalidade. E é justamente isso que iremos discutir nesse post.

Programando a Ribbon do Excel com XML e VBA

Fazendo uso somente do VBA não é possível customizar a Ribbon do Excel, isso porque o VBA opera internamente. Para modificar a estrutura XML responsável pela organização da Ribbon é preciso acessar o arquivo externamente. Isso pode ser feito usando qualquer ferramenta de edição de XML, como por exemplo o próprio Bloco de notas. Porém, o aconselhável é fazer isso usando uma ferramenta destinada exclusivamente para esse tipo de opção, pois somente assim poderemos validar o arquivo e saber exatamente se as alterações que estamos fazendo estão corretas. Para essas alterações iremos utilizar uma ferramenta chamada CustomUIEditor. Para saber como instalar e utilizar corretamente assista ao vídeo.

Guias (Tabs)

A estrutura CustomUI XML abaixo pode ser usada para criar uma nova Guia dentro de uma pasta de trabalho do Excel, com o nome “Página Inicial”. É possível adicionar várias Guias, a estrutura se repete, com exceção do elemento “id” que sempre terá que receber um nome específico para cada Guia. A mesma ideia se repete para todos os outros elementos, a exemplo os grupos e controles.

Na grande maioria dos casos, o uso de apenas algumas dessas propriedades já é suficiente para determinar as funções desejadas, isso vale para todos os controles da Ribbon. Note que no exemplo acima, usamos apenas as propriedades “id“, “label” e “visible“, e isso já foi o bastante para a criação da Guia desejada sem afetar ou comprometer nada do nosso arquivo. Eu poderia ainda apagar a propriedade “visible“, ao fazer isso, o arquivo iria continuar exibindo a Guia Página inicial criada, isso porque quando não especificamos essa propriedade, o padrão é o “true“, ou seja, verdadeiro. Agora se eu quisesse que a Tab “Página inicial” ficasse oculta, nesse caso eu precisaria obrigatoriamente especificar a propriedade “visible” do elemento Tab como sendo “false“.

Propriedades

Dentre todos as propriedades do elemento Guia (tab), que podem ser usados, estão:

  • id
  • idMso
  • idQ
  • keytip
  • label
  • tag
  • commentText
  • visible

CustomUI XML

				
					<customUI  xmlns="http://schemas.microsoft.com/office/2009/07/customui" >
	<ribbon >
		<tabs >
			<!--Criando uma nova Guia-->
			<tab
				id="tab1"
				label="Página Inicial"
				visible="true">
			</tab >
		</tabs >
	</ribbon >
</customUI >
				
			

Callback VBA

				
					Public Sub Tab1_getKeytip(control as IRibbonControl, ByRef returnedVal)
' Code for getKeytip callback. Ribbon control tab
End Sub
Public Sub Tab1_getLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getLabel callback. Ribbon control tab
End Sub
Public Sub Tab1_getVisible(control as IRibbonControl, ByRef returnedVal)
' Code for getVisible callback. Ribbon control tab
End Sub
				
			

Resultado

Criando uma nova Guia Ribbon no Excel

Mudando a posição da Guia criada

Existem duas maneiras de mudar a posição de uma Guia, usando o elemento “insertBeforeMso“, que traduzindo seria “Inserir antes”, ou usando o elemento “insertAfterMso“, que significa “Inserir após”.  Nesse caso, se quisermos inserir qualquer Guia criada antes da Tab “Pagina Inicial” nativa do Excel, basta escrevermos insertBeforeMso=”TabHome”, conforme especificado no exemplo abaixo.

CustomUI XML

				
					<!--..-->
			<tab
				id="tab1"
				label="Página Inicial"
				insertBeforeMso="TabHome"
				visible="true">
			</tab >
<!--..-->
				
			

Resultado

Como mudar a posição da Guia Excel

Ocultando as Todas as Guias nativas do Excel

Para ocultar todas as Tabs nativas do Excel, você pode estar fazendo uso de duas formas distintas, a primeira é você definir a propriedade “visible=false” individualmente para cada Tab do Excel, já na segunda, basta inserir o atributo “startFromScratch=”false”” na frente do elemento ribbon. Ao definir esse atributo como sendo Falso, você força o Excel a ocultar todas as tabs sempre que essa pasta de trabalho for iniciada.

CustomUI XML

				
					<!--...-->
			<tab 
				idMso="TabHome"
				visible="false"/>
			<tab 
				idMso="TabInsert"
				visible="false"/>
			<tab 
				idMso="TabPageLayoutExcel"
				visible="false"/>
			<tab 
				idMso="TabFormulas"
				visible="false"/>
			<tab 
				idMso="TabData"
				visible="false"/>
			<tab 
				idMso="TabReview"
				visible="false"/>
			<tab 
				idMso="TabView"
				visible="false"/>
			<tab 
				idMso="TabDeveloper"
				visible="false"/>
			<tab 
				idMso="TabAddIns"
				visible="false"/>
			<tab 
				idMso="TabPrintPreview"
				visible="false"/>
			<tab 
				idMso="TabBackgroundRemoval"
				visible="false"/>
<!--...-->
				
			
				
					<!--...-->
	<!--True = Oculta todas as Guias nativas-->
	    <ribbon startFromScratch="true">
<!--...-->
				
			

Resultado

Ocultando as Guias nativas do Excel

Grupos

Propriedades

  • autoScale
  • centerVertically
  • id
  • idMso
  • idQ
  • image
  • imageMso
  • keytip
  • label
  • tag
  • CommentText
  • visible

CustomUI XML

				
					<!--...-->
				<!--Criando um novo Grupo-->
				<group 
					id="Grupo1"
					label="Grupo de Controles"
					visible="true" >
				</group >
<!--...-->
				
			

Callback VBA

				
					Public Sub Group1_getImage(control as IRibbonControl, ByRef returnedVal)
' Code for getImage callback. Ribbon control group
End Sub

Public Sub Group1_getKeytip(control as IRibbonControl, ByRef returnedVal)
' Code for getKeytip callback. Ribbon control group
End Sub

Public Sub Group1_getLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getLabel callback. Ribbon control group
End Sub

Public Sub Group1_getVisible(control as IRibbonControl, ByRef returnedVal)
' Code for getVisible callback. Ribbon control group
End Sub

				
			

Criando Controles

Label (Rótulo)

Propriedades

  • enabled
  • id
  • idMso
  • idQ
  • label
  • screentip
  • showlLbel
  • supertip
  • tag
  • CommentText
  • visible

CustomUI XML

				
					<!--...-->					
					<!--Criando um controle tipo Label-->
					<labelControl 
						id="label1"
						getLabel="label1_getLabel"/>
<!--...-->
				
			

Callback VBA

				
					Public Sub Label1_getLabel(control As IRibbonControl, ByRef returnedVal)
' Code for getLabel callback. Ribbon control labelControl
    returnedVal = "Hello World!"
    'returnedVal = "Bem vindo: " & Application.UserName
End Sub

Public Sub Label1_getLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getLabel callback. Ribbon control labelControl
End Sub

Public Sub Label1_getScreentip(control as IRibbonControl, ByRef returnedVal)
' Code for getScreentip callback. Ribbon control labelControl
End Sub

Public Sub Label1_getShowLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getShowLabel callback. Ribbon control labelControl
End Sub

Public Sub Label1_getSupertip(control as IRibbonControl, ByRef returnedVal)
' Code for getSupertip callback. Ribbon control labelControl
End Sub

Public Sub Label1_getVisible(control as IRibbonControl, ByRef returnedVal)
' Code for getVisible callback. Ribbon control labelControl
End Sub
				
			

Resultado

EditBox (Caixa de edição)

Propriedades

  • enabled
  • id
  • idMso
  • image
  • imageMso
  • keytip
  • label
  • maxLength
  • screentip
  • showImage
  • showLabel
  • sizeString
  • supertip
  • tag
  • CommentText
  • visible

CustomUI XML

				
					<!--...-->
					<editBox 
						id="EditBox1"
						imageMso="CalendarInsert"
						getText="EditBox1_getText"
						label="Caixa de edição"/>
<!--...-->
				
			

Callback VBA

				
					Public Sub EditBox1_getEnabled(control as IRibbonControl, ByRef returnedVal)
' Code for getEnabled callback. Ribbon control editBox
End Sub

Public Sub EditBox1_getImage(control as IRibbonControl, ByRef returnedVal)
' Code for getImage callback. Ribbon control editBox
End Sub

Public Sub EditBox1_getKeytip(control as IRibbonControl, ByRef returnedVal)
' Code for getKeytip callback. Ribbon control editBox
End Sub

Public Sub EditBox1_getLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getLabel callback. Ribbon control editBox
End Sub

Public Sub EditBox1_getScreentip(control as IRibbonControl, ByRef returnedVal)
' Code for getScreentip callback. Ribbon control editBox
End Sub

Public Sub EditBox1_getShowImage(control as IRibbonControl, ByRef returnedVal)
' Code for getShowImage callback. Ribbon control editBox
End Sub

Public Sub EditBox1_getShowLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getShowLabel callback. Ribbon control editBox
End Sub

Public Sub EditBox1_getSupertip(control as IRibbonControl, ByRef returnedVal)
' Code for getSupertip callback. Ribbon control editBox
End Sub

Public Sub EditBox1_getText(control As IRibbonControl, ByRef returnedVal)
' Code for getText callback. Ribbon control editBox
    returnedVal = Date
End Sub

Public Sub EditBox1_getVisible(control as IRibbonControl, ByRef returnedVal)
' Code for getVisible callback. Ribbon control editBox
End Sub

Public Sub EditBox1_onChange(control as IRibbonControl, Text as String)
' Code for onChange callback. Ribbon control editBox
End Sub

				
			

Resultado

Button (Botão)

Propriedades

  • description
  • enabled
  • id
  • idMso
  • idQ
  • image
  • imageMso
  • keytip
  • label
  • onAction
  • screentip
  • showImage
  • shwoLabel
  • size
  • supertip
  • tag
  • CommentText
  • visible

CustomUI XML

				
					<!--...-->					
					<!--Criando controle Button-->
					<button 
						id="Button1"
						label="Nova venda"
						image="shop"
						size="normal"/>
<!--...-->						
				
			

Callback VBA

				
					Public Sub Button1_getDescription(control as IRibbonControl, ByRef returnedVal)
' Code for getDescription callback. Ribbon control button
End Sub

Public Sub Button1_getEnabled(control as IRibbonControl, ByRef returnedVal)
' Code for getEnabled callback. Ribbon control button
End Sub

Public Sub Button1_getImage(control as IRibbonControl, ByRef returnedVal)
' Code for getImage callback. Ribbon control button
End Sub

Public Sub Button1_getKeytip(control as IRibbonControl, ByRef returnedVal)
' Code for getKeytip callback. Ribbon control button
End Sub

Public Sub Button1_getLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getLabel callback. Ribbon control button
End Sub

Public Sub Button1_getScreentip(control as IRibbonControl, ByRef returnedVal)
' Code for getScreentip callback. Ribbon control button
End Sub

Public Sub Button1_getShowImage(control as IRibbonControl, ByRef returnedVal)
' Code for getShowImage callback. Ribbon control button
End Sub

Public Sub Button1_getShowLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getShowLabel callback. Ribbon control button
End Sub

Public Sub Button1_getSize(control as IRibbonControl, ByRef returnedVal)
' Code for getSize callback. Ribbon control button
End Sub

Public Sub Button1_getSupertip(control as IRibbonControl, ByRef returnedVal)
' Code for getSupertip callback. Ribbon control button
End Sub

Public Sub Button1_getVisible(control as IRibbonControl, ByRef returnedVal)
' Code for getVisible callback. Ribbon control button
End Sub

Public Sub Button1_onAction(control As IRibbonControl)
' Code for onAction callback. Ribbon control button
    UserForm1.Show
End Sub

				
			

Resultado

Uma propriedade adicional do controle Button que ajuda bastante é “size“, que nos possibilita mudar o tamanho do controle. Por exemplo, se modificarmos a propriedade de size=”normal” para size=”large” dentro CustomXML, notaremos o seguinte resultado.

Uma propriedade adicional do controle Button que ajuda bastante é “size“, que nos possibilita mudar o tamanho do controle. Por exemplo, se modificarmos a propriedade de size=”normal” para size=”large” dentro CustomUI XML, notaremos o seguinte resultado.

Button Group (Grupo de botões)

Propriedades

  • id
  • idQ
  • CommentText
  • Visible

CustomUI XML

				
					<!--...-->	
					<buttonGroup  id="Buttongroup1" >
						<button 
							id="Button2"
							imageMso="GroupLinkedNotes"
							label="Button2"/>
						<button 
							id="Button3"
							imageMso="MicrosoftAccess"
							label="Button3"/>
						<button 
							id="Button4"
							imageMso="OutlookTaskOpen"
							label="Button4"/>
					</buttonGroup >
					<!--...-->	
				
			

Resultado

Inserir Button Group Ribbon

Check Box

Propriedades

  • description
  • enabled
  • id
  • idMso
  • idQ
  • label
  • screentip
  • supertip
  • tag
  • CommentText
  • visible

CustomUI XML

				
					<!--...-->
					<separator id="sep1"/>
					<checkBox 
						id="Checkbox1"
						label="Gridlines"
						onAction="Checkbox1_onAction"/>
					<checkBox 
						id="Checkbox2"
						label="FormulaBar"
						onAction="Checkbox2_onAction"/>
					<checkBox 
						id="Checkbox3"
						label="StatusBar"
						onAction="Checkbox3_onAction"/>
<!--...-->
					
				
			

Callback VBA

				
					Public Sub Checkbox1_getDescription(control as IRibbonControl, ByRef returnedVal)
' Code for getDescription callback. Ribbon control checkBox
End Sub

Public Sub Checkbox1_getEnabled(control as IRibbonControl, ByRef returnedVal)
' Code for getEnabled callback. Ribbon control checkBox
End Sub

Public Sub Checkbox1_getKeytip(control as IRibbonControl, ByRef returnedVal)
' Code for getKeytip callback. Ribbon control checkBox
End Sub

Public Sub Checkbox1_getLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getLabel callback. Ribbon control checkBox
End Sub

Public Sub Checkbox1_getPressed(control as IRibbonControl, ByRef returnedVal)
' Code for getPressed callback. Ribbon control checkBox
End Sub

Public Sub Checkbox1_getScreentip(control as IRibbonControl, ByRef returnedVal)
' Code for getScreentip callback. Ribbon control checkBox
End Sub

Public Sub Checkbox1_getSupertip(control as IRibbonControl, ByRef returnedVal)
' Code for getSupertip callback. Ribbon control checkBox
End Sub

Public Sub Checkbox1_getVisible(control as IRibbonControl, ByRef returnedVal)
' Code for getVisible callback. Ribbon control checkBox
End Sub

Public Sub Checkbox1_onAction(control As IRibbonControl, pressed As Boolean)
' Code for onAction callback. Ribbon control checkBox

If pressed = True Then
    ActiveWindow.DisplayGridlines = True
    pressed = False
Else
    ActiveWindow.DisplayGridlines = False
    pressed = True
End If

End Sub

Public Sub Checkbox2_onAction(control As IRibbonControl, pressed As Boolean)
' Code for onAction callback. Ribbon control checkBox

If pressed = True Then
   Application.DisplayFormulaBar = True
   pressed = False
Else
    Application.DisplayFormulaBar = False
    pressed = True
End If

End Sub

Public Sub Checkbox3_onAction(control As IRibbonControl, pressed As Boolean)
' Code for onAction callback. Ribbon control checkBox

If pressed = True Then
   Application.DisplayStatusBar = True
   pressed = False
Else
    Application.DisplayStatusBar = False
    pressed = True
End If

End Sub
				
			

Resultado

Como colocar o Controle CheckBox Ribbon Excel

ComboBox (Caixa de combinação)

  • enabled
  • id
  • idMso
  • idQ
  • image
  • imageMso
  • keytip
  • label
  • maxLength
  • screetip
  • showImage
  • showItemAttribut
  • showItemImage
  • showLabel
  • sizeString
  • supertip
  • tag
  • CommentText
  • visible

CustomUI XML

				
					<!--...-->
					<separator id="sep2"/>
					<comboBox 
						id="Combobox1"
						imageMso="FieldsPaneShowHide"
						label="Selecione o Setor:">
						<item 
							id="Item1"
							imageMso="AnimationCustomExitDialog"
							label="Vendas"/>
						<item 
							id="Item2"
							imageMso="ArrangeByCategory"
							label="Comercial"/>
						<item 
							id="Item3"
							imageMso="ButtonTaskOfficeDiagnostic"
							label="Compras"/>
						<item 
							id="Item4"
							imageMso="DocInfoActivate"
							label="Administrativo"/>
						<item 
							id="Item5"
							imageMso="AnimationCustomAddEntranceDialog"
							label="RH"/>
					</comboBox >
<!--...-->
				
			

Callback VBA

				
					Public Sub Combobox1_getEnabled(control as IRibbonControl, ByRef returnedVal)
' Code for getEnabled callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getImage(control as IRibbonControl, ByRef returnedVal)
' Code for getImage callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getItemCount(control as IRibbonControl, ByRef returnedVal)
' Code for getItemCount callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getItemID(control as IRibbonControl, index as Integer, ByRef id)
' Code for getItemID callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getItemImage(control as IRibbonControl, index as Integer, ByRef returnedVal)
' Code for getItemImage callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getItemLabel(control as IRibbonControl, index as Integer, ByRef returnedVal)
' Code for getItemLabel callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getItemScreentip(control as IRibbonControl, index as Integer, ByRef returnedVal)
' Code for getItemScreentip callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getItemSupertip(control as IRibbonControl, index as Integer, ByRef returnedVal)
' Code for getItemSupertip callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getKeytip(control as IRibbonControl, ByRef returnedVal)
' Code for getKeytip callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getLabel callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getScreentip(control as IRibbonControl, ByRef returnedVal)
' Code for getScreentip callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getShowImage(control as IRibbonControl, ByRef returnedVal)
' Code for getShowImage callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getShowLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getShowLabel callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getSupertip(control as IRibbonControl, ByRef returnedVal)
' Code for getSupertip callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getText(control as IRibbonControl, ByRef returnedVal)
' Code for getText callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_getVisible(control as IRibbonControl, ByRef returnedVal)
' Code for getVisible callback. Ribbon control comboBox
End Sub
Public Sub Combobox1_onChange(control as IRibbonControl, Text as String)
' Code for onChange callback. Ribbon control comboBox
End Sub
				
			

Resultado

DropdownBox

Propriedades

  • enabled
  • id
  • idMso
  • idQ
  • image
  • imageMso
  • keytip
  • label
  • maxLength
  • screetip
  • showImage
  • showItemAttribut
  • showItemImage
  • showLabel
  • sizeString
  • supertip
  • tag
  • CommentText
  • visible

CustomUI XML

				
					<!--...-->
					<dropDown 
						id="Dropdown1"
						imageMso="AudioFadeOutTime"
						label="Relatório:">
						<item 
							id="Item6"
							imageMso="GroupResourceGraphFormat"
							label="Vendedores"/>
						<item 
							id="Item7"
							imageMso="VisualReports"
							label="Fornecedores"/>
						<item 
							id="Item8"
							imageMso="ChartTypeAreaInsertGallery"
							label="Funcionários"/>
						<item 
							id="Item9"
							imageMso="ChartTypePieInsertGallery"
							label="Transportadoras"/>
					</dropDown >
<!--...-->
				
			

Callback VBA

				
					Public Sub Dropdown1_getEnabled(control as IRibbonControl, ByRef returnedVal)
' Code for getEnabled callback. Ribbon control dropDown
End Sub
Public Sub Dropdown1_getImage(control as IRibbonControl, ByRef returnedVal)
' Code for getImage callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getItemCount(control as IRibbonControl, ByRef returnedVal)
' Code for getItemCount callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getItemID(control as IRibbonControl, index as Integer, ByRef id)
' Code for getItemID callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getItemImage(control as IRibbonControl, index as Integer, ByRef returnedVal)
' Code for getItemImage callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getItemLabel(control as IRibbonControl, index as Integer, ByRef returnedVal)
' Code for getItemLabel callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getItemScreentip(control as IRibbonControl, index as Integer, ByRef returnedVal)
' Code for getItemScreentip callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getItemSupertip(control as IRibbonControl, index as Integer, ByRef returnedVal)
' Code for getItemSupertip callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getKeytip(control as IRibbonControl, ByRef returnedVal)
' Code for getKeytip callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getLabel callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getScreentip(control as IRibbonControl, ByRef returnedVal)
' Code for getScreentip callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getSelectedItemID(control as IRibbonControl, ByRef index)
' Code for getSelectedItemID callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getSelectedItemIndex(control as IRibbonControl, ByRef returnedVal)
' Code for getSelectedItemIndex callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getShowImage(control as IRibbonControl, ByRef returnedVal)
' Code for getShowImage callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getShowLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getShowLabel callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getSupertip(control as IRibbonControl, ByRef returnedVal)
' Code for getSupertip callback. Ribbon control dropDown
End Sub

Public Sub Dropdown1_getVisible(control as IRibbonControl, ByRef returnedVal)
' Code for getVisible callback. Ribbon control dropDown
End Sub
				
			

Resultado

SplitButton

O controle SlipButton é um dos mais utilizados dentro da Ribbon, isso porque ele permite criar uma hierarquia de menus com mais de um tipo de controle.

Propriedades

  • enabled
  • id
  • idMso
  • idQ
  • keytip
  • showLabel
  • size
  • tag
  • CommentTxt
  • visible

CustomUI XML

				
										<separator id="sep3"/>

					<splitButton id="splitButton1" size="normal" >
						<button 
							id="Button5" 
							label="Desempenho"
							image="grafico" />
						<menu 
							id="Menu1" 
							label="Acomapanhamento" 
							itemSize="normal" >
						<menuSeparator 
							id="Menuseparator1" 
							title="Dashboards principais" />
						<button 
							id="Button6" 
							label="Investimentos"
							image="investimentos"
							onAction="VerInvestimentos" />
						<button 
							id="Button7" 
							label="Markenting"
							image="markenting"
							onAction="VerMarkenting" />

							<menu 
								id="Menu2" 
								label="Vendas"
								image="vendas" 
								itemSize="normal" >

								<button 
									id="Button9" 
									label="Valores"
									image="produtos"
									onAction="VerValores" />
								<button 
									id="Button10" 
									label="Unidades"
									image="produtos"
									onAction="VerProdutos" />
							</menu >
						<menuSeparator 
							id="Menuseparator3" 
							title="Outros Dashboards" />
						<button 
							id="Button11" 
							label="Pesquisa"
							image="pesquisa"
							onAction="VerPesquisa" />
						<button 
							id="Button12" 
							label="eComerce"
							image="ecomerce"
							onAction="VerEcomerce" />
						</menu >
					</splitButton >
				
			

Callback VBA

				
					'CALLBACKS POSSÍVEIS DENTRO DO VBA PRA O SLIPBUTTON
Public Sub Splitbutton1_getEnabled(control as IRibbonControl, ByRef returnedVal)
' Code for getEnabled callback. Ribbon control splitButton
End Sub
Public Sub Splitbutton1_getKeytip(control as IRibbonControl, ByRef returnedVal)
' Code for getKeytip callback. Ribbon control splitButton
End Sub
Public Sub Splitbutton1_getShowLabel(control as IRibbonControl, ByRef returnedVal)
' Code for getShowLabel callback. Ribbon control splitButton
End Sub
Public Sub Splitbutton1_getVisible(control as IRibbonControl, ByRef returnedVal)
' Code for getVisible callback. Ribbon control splitButton

End Sub
'-----------------------

'CALLBACKS PARA OS BOTÕES DENTRO DO SLIPBUTTON
'Callback for Button6 onAction
Sub VerInvestimentos(control As IRibbonControl)
End Sub

'Callback for Button7 onAction
Sub VerMarkenting(control As IRibbonControl)
End Sub

'Callback for Button9 onAction
Sub VerValores(control As IRibbonControl)
End Sub

'Callback for Button10 onAction
Sub VerProdutos(control As IRibbonControl)
End Sub

'Callback for Button11 onAction
Sub VerPesquisa(control As IRibbonControl)
End Sub

'Callback for Button12 onAction
Sub VerEcomerce(control As IRibbonControl)
End Sub
				
			

Resultado

Backstage

Dentro do Backstage o Excel é possível encontrar várias Tabs e Botões. Temos por exemplo as Guias “Informações”, Salvar”, Salvar como”, “Imprimir”, “Compartilhar”, “Exportar”, etc. Como botões, temos o “Novo”, “Abrir”,  “Página Inicial”. Porém, se seu objetivo é criar um sistema com limitações para os usuários, torna-se interessante ocultar todos esses controles e Tabs para evitar problemas maiores.

Seguindo os método abaixo, você conseguirá não apenas ocultar essas Guias e controles, com também inserir as suas próprias.

CustomUI XML

				
					<backstage>

   <button 
	idMso="FileSave" 
	visible="false"/>
   <button 
	idMso="FileSaveAs" 
	visible="false"/>
   <button 
	idMso="FileOpen" visible="false"/>
   <button 
	idMso="FileClose" 
	visible="false"/>
   <button 
	idMso="ApplicationOptionsDialog" 
	visible="false"/>
   <button 
	idMso="FileExit" 
	visible="false"/>
   <tab 
	idMso="PlaceTabHome" 
	visible="false"/>
	
   <tab 
	idMso="TabInfo" 
	visible="false"/>
   <tab 
	idMso="TabRecent" 
	visible="false"/>
   <tab 
	idMso="TabNew" 
	visible="false"/>
   <tab 
	idMso="TabPrint" 
	visible="false"/>
   <tab 
	idMso="TabShare" 
	visible="false"/>
   <tab 
	idMso="TabHelp" 
	visible="false"/>
   <tab 
	idMso="TabPublish" 
	visible="false"/>
   <tab 
	idMso="TabSave" 
	visible="false"/>
   <tab 
	idMso="TabOfficeStart" 
	visible="false"/>
   <tab 
	idMso="TabOfficeFeedback" 
	visible="false"/>
   <button 
	idMso="HistoryTab" 
	visible="false"/>

      <tab 
	id="customTab" 
	label="Portais">
      <firstColumn>
      	<taskGroup 
			id="customTaskGroup">
      		<category 
				id="tgCategory1" 
				label="Click para Acessar">
      				<task 
						id="task1" 
						label="Acessar Site" 
						image="site" 
						onAction="AcSite"/>
					<task 
						id="task2" 
						label="Instagram" 
						image="insta" 
						onAction="AcInstagram"/>
      		</category>
      	</taskGroup>
      </firstColumn>
      </tab>
</backstage>
				
			

Resultado

6 thoughts on “Como programar a Ribbon do Excel com XML e VBA”

  1. Mestre, como desabilitar o Botão da Ribbon com base em critério. Ex: Na célula A2 da Planilha tem o número 1 e 2 Botões devem ser desabilitados quando o número for 1 e habilitado quando for 2.

  2. No evento backstage quando aplico o código e tento validar, o programa diz que o elemento é inválido. Como contornar esse erro?

Leave a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *