web 2.0


Office 2010 Personalizando o Ribbon via XML (autoScale)

Todos sabemos como era difícil customizar (ou personalizar, se preferir) o Office 2007. Isso mudou bastante no Office 2010 e ficou tudo bem mais simples. Uma grande novidade nesta personalização da Faixa de Opções (também conhecida como Ribbon ou RibbonX) esta ligada a escala dos grupos.

Anteriormente, somente os grupos padrões da Faixa de Opções podiam colapsar, agora, foi introduzido o atributo autoScale o qual é utilizado para determinar se um grupo personalizado deve ou não colapsar quando reduzimos o tamanho da Faixa de Opções.

Aproveite para fazer o nosso curso de programação VBA.



Figura 1: Grupo da Faixa de Opções expandido

O grupo "Minhas Ferramentas", no momento, está expandido normalmente. Mas supondo que a configuração da tela ou do monitor seja modificada, nós obteríamos o seguinte resultado com o autoScale="true":
 


Figura 2: Grupo da Faixa de Opções colapsado

Se continuarmos reduzindo a Faixa de Opções, o grupo continua o processo, colapsando ainda mais os elementos de nosso grupo:


Figura 3: Botões colapsados para um splitButton

Para implementar esta customização / personalização da Faixa de Opções (Ribbon) basta adicionar o atributo autoScale e determinar o seu valor como sendo "true".

Note que este atributo deve ser determinado para cada grupo separadamente, ele não tem efeito global sobre os outros grupos em seu Ribbon. 

Tags: , , ,

Microsoft Office

RibbonX – Adicionando conteúdo dinâmico

Neste breve artigo discutirei a criação de um menu dinâmico na nova interface de usuário do Excel 2007. Este artigo é um excerto do material de treinamento sobre programação do RibbonX o qual pode ser adquirido na loja do site em: http://loja.msofficegurus.com No Treinamento, o leitor aprenderá todo o processo de programação e implementação das soluções desenvolvidas.

Para aqueles que se acostumaram com o antigo método de personalização das barras de ferramentas o novo método pode parecer horrível. Não obstante a nova complexidade introduzida no RibbonX, a flexibilidade e novas possibilidades de personalização vão muito além do que é possível fazer no antigo sistema. Por exemplo:
 

  • Você alguma vez precisou desabilitar um comando no Excel (digamos, o comando “Imprimir”)? Se sim, o leitor recordará das implicações disso. Na nova interface, podemos fazê-lo globalmente evitando brechas na impressão;
     
  • Precisou remover o menu principal pelo seu? Lembra da implicação disso para outras sessões do Excel?
     
  • Alguma vez precisou adicionar imagens em grupos? Agora, podemos fazê-lo rapidamente como mostra a figura:


Figura 1: Criando galerias de imagens

Ao passo que é verdadeiro que requererá um pouco mais de tempo nosso no XML, é muito mais verdadeiro que as possibilidades mais do que compensam tal trabalho. Além do que para os que desenvolvem em VS.NET o trabalho é facilitado pelos “schemas” XML que adicionam “Intellisense” durante a criação.

Portanto, vamos supor o seguinte cenário: existe uma determinada interface que deve somente ser 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 (um procedimento VBA) 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 2: Menu de conteúdo dinâmmico

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 envolvendo XML (os quais podem ser feitos no CustomUI Editor ou outro editor de XML qualquer): 

·         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="idGrp"
     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.

Tags: , , , ,

Microsoft Office | VBA

Customizando a Ribbon no Office 2010

lá pessoal, neste primeiro artigo vou demostrar pra você um dos novos recursos que a versão 14 do Office nos oferece.

É sábido para muitos de nós que desenvolvemos para Office 2007, que para manipular os componentes da faixa de opções devemos ter conhecimentos no formato de XML para tal tarefa, ja que toda a definição dos elementos é feita diretamente no arquivo XML.

Pois bem, vejam que a Microsoft atendeu aos nossos pedidos e incorporou no Office 2010 um editor de personalização da Ribbon.

O que na versão anteriro só era possível modificar somente a barra de acesso rápido, agora podemos incluir/remover guias e grupos interativamente. E mais, é possível ainda renomear as guias padrões do Office.

Vamos lá !

 

         

 

  • Clique em Options
  • No dialogo de opções do Excel, localize e clique na categoria Customize Ribbon

  • Nessa tela temos a mesma visão que na versão 2007, porem agora temos mais cinco novos botões.
  • Para criar uma nova Guia, clique em New Tab
  • Será criada uma guia na lista logo após a guia que esta selecionada
  • Para criar um novo grupo, selecione uma guia na lista e e clique em New Group
  • Para renomar uma guia ou um grupo, selecione o item na lista e clique no botão Rename
  • Após as modificações, clique no botão OK para sair

 

       

 

A nova guia criada !

 

Conclusão

Se considerarmos o nivel de personalização que tinhamos no Office 2007, podemos dizer que ja tivemos um avanço nesse quesito pois assim podemo criar nossas proprias guias e grupo.

Mas ainda não chegou ao estagio de personalização completo como tinhamos  (e ainda temos) na versão 2003, pois, por enquanto, só é possível realizar modificações nas guias e grupos a nivel de aplicativo, ou seja, para todo o Excel. Não é possível criar botões personalizados e nem guias e grupos a nivel de documento.

Um grande abraço e até o proximo artigo.

 

[]s

 

Tags: , , , ,

Microsoft Office

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