Mensagem
  • Kunena is not installed or the installed Kunena version is not supported. The plug-in has now been disabled. Please install/upgrade Kunena to version 1.7 for the Kunena Discuss Plug-in to function properly.

Criando um Ribbon Dinâmico

Importância da Faixa de Opções Dinâmica

Neste artigo tratarei da criação dinâmica de ribbons utilizando-se de dados disponíveis na planilha ativa. Isto é útil em casos em que haja a necessidade dos controles serem alterados, sem necessidade de alterações no código xml. Estes controles também permitem que sejam passados paramêtros para qualquer rotina.

Primeiro é necessário editar o arquivo xml, do arquivo, para isto abra o arquivo no Office no Office 2007 Custom UI Editor...

Neste arquivo xml, criei 2 grupos, cada um deles contendo um combobox


<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="true">
<tabs>
<tab id="MeuRibbon" label=" Meu Ribbon Dinâmico" insertBeforeMso="TabHome">
<group id="Grupo1" label="Grupo 1">
<comboBox id="Cb1"
label="Selecione a Opção:"
onChange="MyCombo1_Click"
getItemCount="CountGrupo1"
getItemLabel ="LabelGrupo1"
sizeString="123456789012345678901234567890">

</comboBox>
</group>
<group id="Grupo2" label="Grupo 2">
<comboBox id="Cb2"
label="Selecione a Opção:"
onChange="MyCombo2_Click"
getItemCount="CountGrupo2"
getItemLabel = "LabelGrupo2"
sizeString="123456789012345678901234567890">

</comboBox>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

As definições xml do combobox são as seguintes:

  • comboBox id="Cb2" - definindo o ID do controle
  • label="Selecione a Opção:" - definindo o label que será apresentado ao usuário.
  • onChange="MyCombo2_Click" - definindo qual será a ação executada na alteração do controle pelo usuário
  • getItemCount="CountGrupo2" - retorna a quantidade de itens que serão exibidos no combo
  • getItemLabel = "LabelGrupo2" - preenche o combobox com os valores
  • sizeString="123456789012345678901234567890" - definindo o tamanho do combobox

Pronto o nosso arquivo xml já está pronto para receber os dados em tempo de execução, para que o código funcione , é necessário a criação das rotinas no nosso arquivo xlsm.

O código necessário par ao arquivo .xlsm é o seguinte:

'Intervalo para o Combo1
Dim cb1rg As Range
'Intervalo para o Combo2
Dim cb2rg As Range
'Rotinas para o grupo1


Sub MyCombo1_Click(control As IRibbonControl, text As String)
   Call Minharotina("Grupo 1", text)
End Sub


Sub CountGrupo1(control As IRibbonControl, ByRef returnedVal)
  Set cb1rg = Plan1.Range("A2:A" & Plan1.Range("A2").End(xlDown).Row)
  returnedVal = cb1rg.Rows.Count
End Sub


Sub LabelGrupo1(control As IRibbonControl, index As Integer, ByRef returnedVal)
  returnedVal = cb1rg.Cells(index + 1).Value
End Sub


'Rotinas para o Grupo 2
Sub MyCombo2_Click(control As IRibbonControl, text As String)
  Call Minharotina("Grupo 1", text)
End Sub


Sub CountGrupo2(control As IRibbonControl, ByRef returnedVal)
  Set cb2rg = Plan1.Range("B2:B" & Plan1.Range("B2").End(xlDown).Row)
  returnedVal = cb2rg.Rows.Count
End Sub


Sub LabelGrupo2(control As IRibbonControl, index As Integer, ByRef returnedVal)
  returnedVal = cb2rg.Cells(index + 1).Value
End Sub


Sub MinhaRotina(Plan As String, Item As String)
  MsgBox "Você selecionou o item " & Item & " de " & Plan
End Sub

Pronto , para testar feche e abra o arquivo novamente, os dados constantes na coluna A serão exibidos no grupo 1, os dados constantes na coluna B serão exibidos no Grupo 2.

Como este é meu primeiro Post por aqui, dúvidas e sugestões são bem vindas. Caso tenha algum problema com formatação corrigirei assim que possível.

Exemplo Ribbon Dinamico

Bruno Leite
Office Developer