NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalArtigosLivroexc2007ribbon › Capítulo 1 : 16
Quer receber novidades e e-books gratuitos?
« Anterior Δ Página principal ¤ Índice Próxima »
Programando o RibbonX no Excel 2007
Autor: Robert Friedrick Martim
Lição 16 - Conteúdos Dinâmicos

Até o momento vimos vários formas de personalizar a Faixa de Opções, contudo ainda não vimos todas as formas de fazê-lo.

Suponhamos o seguinte cenário: existe uma determinada interface que deve ser somente mostrada quando algo é clicado (como as guias sensíveis ao contexto). Em situações como estas, nós queremos criar o conteúdo dinâmicamente para que o mesmo seja mostrado somente nas situações determinadas.

Obtemos tal resultado utilizando o atributo getContent. O valor do atributo é, na verdade, um callback que deve ser executado para determinar o conteúdo.

Vejamos um exemplo simples de como isso pode ser feito. A figura abaixo mostra a nossa guia com um menu sem conteúdo:


Figura 10‑1 Conteúdo dinâmico

O conteúdo do menu deve ser mostrado quando a célula A1 da primeira planilha for diferente de vazio. Aqui, teremos dois trabalhos distintos com XML:

  • Criar o XML para definir a guia conforme mostrado acima;
  • Criar o XML para ser inserido dinamicamente no VBA o qual será retornado pelo callback especificado no atributo getContent.

Vamos iniciar pelo XML que criará a guia, grupo e botão conforme a figura anterior:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="setRib">

   <ribbon startFromScratch="false">

    <tabs>
     <tab
    id="idGuia"
    insertBeforeMso="TabHome"
    label="Minha Guia">

      <group
     id="ifGrp"
     label="Meu Grupo">

          <dynamicMenu id="idDMnu"
         getContent="conteudoDin"
         imageMso="Spelling"
         label="Meu Menu Dinâmico"/>

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

Note o atributo getContent do menu dinâmico no XML acima. É este callback que será utilizado para escrever o conteúdo dinamicamente.

Note também o atributo onLoad. Aqui, utilizamos tal atributo para podermos invalidar a Faixa de Opções e forçar a chamada do callback conteudoDin.

O próximo passo requer a criação do conteúdo dinâmico. Neste caso, o ideal é criar um novo arquivo Excel e criar toda a interface e testá-la. Uma vez que tal interface esteja pronta, nós precisamos transformá-la em uma string que será utilizado no VBA.

Este processo requererá um pouco de paciência e cuidado. Lembre-se que usamos as aspas (“”) para abrir e fechar uma string. Não obstante, o código XML já conterá aspas que envelopam os valores dos atributos (por exemplo, getContent="conteudoDin"). Neste caso, precisamos duplicar as aspas para que não haja erro na string durante o callback.
Vejamos então uma string contendo o código XML:

xml = "<menu xmlns=""http://schemas.microsoft.com/office/2006/01/customui"">" & _
      "<button id=""btn1"" imageMso=""FileOpen"" label=""Abrir doc"" onAction=""callbackDin"" />" & _
      "<button id=""btn2"" imageMso=""ChartTypeAllInsertDialog"" label=""Criar gráfico"" onAction=""callbackDin"" />" & _
      "<button id=""btn3"" imageMso=""XmlDataRefresh"" label=""Atualizar Dados XML"" onAction=""callbackDin"" />" & _
      "</menu>"

Finalmente, precisamos gerar os callbacks e exportá-los para o VBA onde escreveremos o miolo. Iniciaremos pelo VBE da pasta de trabalho onde inseriremos o código a seguir:

Option Explicit

Private Sub Workbook_Open()
'   Ao abrir, determina se a célula A1 possui
'   algo escrito
    If Sheet1.Range("A1") <> "" Then
'       Variável global declarada no módulo
'       como sendo pública
        blnConteudo = True
    End If
End Sub

Agora, inseriremos o código no VBE da planilha 1 (sheet1) para checar se o valor em A1 é diferente de vazio. A checagem ocorrerá sempre que algo for modificado na planilha:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
'   O valor booleano para determinar se o conteúdo
'   é ou nao mostrado é definido de início como "False" (falso)
    blnConteudo = False

'   Checar para saber se há algo na célula A1
    If Sheet1.Range("A1") <> "" Then
'       Se sim, modificar o valor booleano para "True"
        blnConteudo = True
    End If
'   Chamar a rotina que invalida o RibbonX
    Call invalidarRib
End Sub

Finalmente, adicione um módulo onde inseriremos os callbacks como segue:

Option Explicit
'Variável booleana pública para determinar
'Se o conteúdo é ou nao mostrado
Public blnConteudo  As Boolean

'Variável global representando o nosso RibbonX
Dim mRib            As IRibbonUI

'Rotina a ser chamada para invalidar o RibbonX
Sub invalidarRib()
    mRib.Invalidate
End Sub

'Callback executado quando o ribbon é carregado
'(refere-se ao atributo onLoad)
Sub setRib(ribbon As IRibbonUI)
'   Instancia a variável global como sendo o ribbon
    Set mRib = ribbon

'   Invalida o Ribbon forçando a reexecução dos callbacks
    mRib.Invalidate
End Sub

'Callback para gerar o conteúdo dinâmica
Sub conteudoDin(control As IRibbonControl, ByRef returnedVal)
'   Variável do tipo string para armazenar o código xml
    Dim xml As String

'   Código xml do conteúdo dinâmico. Note que podemos definir
'   callbacks dentro deste conteúdo xml. Porém, não esqueça de
'   adicionar tais callbacks ao seu conteúdo VBA.

xml = "<menu xmlns=""http://schemas.microsoft.com/office/2006/01/customui"">" & _
      "<button id=""btn1"" imageMso=""FileOpen"" label=""Abrir doc"" onAction=""callbackDin"" />" & _
      "<button id=""btn2"" imageMso=""ChartTypeAllInsertDialog"" label=""Criar gráfico"" onAction=""callbackDin"" />" & _
      "<button id=""btn3"" imageMso=""XmlDataRefresh"" label=""Atualizar Dados XML"" onAction=""callbackDin"" />" & _
      "</menu>"

'   Checar o valor booleano e determinar o que deve ser mostrado
    If blnConteudo = True Then
'       Se verdadeiro, mostrar conteúdo dinâmico
        returnedVal = xml
    Else:
'       Caso contrário, mostrar nada.
        returnedVal = False
    End If
End Sub

Sub callbackDin(control As IRibbonControl)
    MsgBox "Você clicou no botão de id: " & control.ID, vbInformation
End Sub

Salve, feche o arquivo e abra-o novamente. A interface dinâmica está pronta para uso, bastando apenas modificar o valor contido na célula A1 da planilha 1:


Figura 10‑2 Resultado do conteúdo criado dinamicamente

« Anterior Δ Página principal ¤ Índice Próxima »

Quer Aprender VBA no Excel, Sem Dificuldades, com Exemplos
Práticos Passo a Passo e com Explicações Detalhadas?

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Úteis - Passo a Passos

Junto com o livro você Recebe 11 Bônus Incluindo 50 horas de Vídeo Aulas.

Mesmo que Você não Saiba Nada de Programação VBA ou já Tenha Tentado
Aprender VBA e Desistiu ou Achou Difícil, com Este Livro EU GARANTO que Você Aprenderá, SEM DIFICULDADES. APRENDIZADO GARANTIDO.

Clique Aqui Para Todos os Detalhes sobre Esta Oferta

- É com alegria que Comunico o lançamento do meu 42º Livro.

 

- Perfeito para Iniciantes em Programação VBA.

 

- Abordo desde o Básico até Comandos Avançados.

 

- Códigos detalhadamente explicados, linha por linha.

 

- Criação de Funções e Procedimentos com VBA.

 

- O Modelo de Objetos do Excel - Exemplos Práticos.

 

- Criação de Formulários - UseForms.

 

- Criação de um Sistema de Cadastro Completo, com Foto.

 

- Como trabalhar com Tabelas Dinâmicas na Programação VBA.

 

- Como trabalhar com Gráficos na Programação VBA.

 

- Rotina que Escreve um número por Extenso usando VBA.

 

- E muito, muito mais mesmo...

 

- Junto com o livro você recebe 50 horas de Vídeo Aulas sobre Macros, Programação VBA, Fórmulas e Funções Avançadas, Dashboards e Muito mais.

 

[Bônus]: 60 horas de Vídeo Aulas sobre Macros, Programação VBA, Fórmulas e Funções Avançadas no Excel, Recursos Avançados, Dashboards e Muito mais.

 

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Uteis - Passo a Passos

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Uteis - Passo a Passos

A BÍBLIA DA
PROGRAMAÇÃO
VBA NO EXCEL

 

Quer receber novidades e e-books gratuitos?

Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

Todos os direitos reservados, Júlio Battisti 2001-2021 ®

[LIVRO]: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2010 - PASSO-A-PASSO

APRENDA COM JULIO BATTISTI - 1124 PÁGINAS: CLIQUE AQUI