web 2.0


Criando um Ribbon Dinâmico

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.

baixe aqui o arquivo de exemplo -> Exemplo RibbonDinamico.xlsm (17,50 kb)



Bruno Leite
Office Developer

 

 

Tags: , , , , ,

Microsoft Office | VBA

Os comentários estão fechados