AS EMPRESAS ESTÃO "DESESPERADAS" POR ESTE TIPO DE PROFISSIONAL... - VOCÊ É UM DELES?
MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI - O Conhecimento que Vira Dinheiro - CLIQUE AQUI
| « Anterior | Δ Página principal | ¤ Índice | Próxima » |
| Programando o RibbonX no Excel 2007 Autor: Robert Friedrick Martim |
|||
|---|---|---|---|
| Lição 11 - Exemplos Avançados - Parte 2 | |||
Botões especiais: splitButton, toggleButton e checkBoxUm splitButton funciona de forma similar ao menus do tipo popup na versão 2003. Ao acionarmos um splitButton ele nos dará mais opções de comandos o que pode facilitar em muito nossa vida no momento de agruparmos comandos, evitando, assim, o uso excessivo do espaço disponível na Faixa de Opções. Um toggleButton refere-se ao botão de alternância, isto é dependendo do seu estado (pressionado ou não) um comando é executado. Um checkBox é uma caixa de checagem a qual podemos clicar para determinar se algo ficará visível ou não, por exemplo. Crie um novo arquivo nos moldes já definidos e insira o seguinte XML no arquivo (os comentários estão no código): <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <group <!-- Adiciona o boto de alternncia - toggleButton --> <toggleButton <!-- Adiciona caixa de checagem - checkBox --> <!-- Adiciona caixa de checagem - checkBox --> <!-- Adiciona um grupo para adicionarmos o splitButton e respectivos botões --> <splitButton <button <menu <button </tab> Se desejar crie os callbacks e adicione algum código para visualizar o funcionamento: 'Callback for btnToggle onAction 'Callback for chkOcultar onAction 'Callback for chkOcultar getPressed 'Callback for chkOcultar2 onAction 'Callback for chkOcultar2 getPressed 'Callback for btn3 onAction 'Callback for btn4 onAction Finalmente, a sua nova guia será composta conforme mostra a figura abaixo:
Ocultando gruposPode haver cenários onde desejamos ocultar grupos, botões ou tabulações, por exemplo. Aqui discutirei a questão da visibilidade de grupos a qual aparece no tópico anterior, mas não possui código algum para execução. Caso o leitor tenha adquirido o módulo feito a partir da versão Beta 2, praticamente tudo mudou. Embora a estrutura seja basicamente a mesma, existem novos elementos que precisam ser levados em conta para que possamos implementar a solução. Iniciaremos pela análise o evento onLoad (que é um procedimento - callback) o qual é carregado quando o documento é aberto e que anteriormente não era crítico a solução do problema. Determinando o callback para o evento “onLoad”No atributo onLoad, o qual representa um evento durante o carregamento do documento, recebe como valor um determinado procedimento escrito diretamente no XML da interface gráfica. Logo na abertura do tag para a interface gráfica ficaria como segue: <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="setarRibbon"> O nome do procedimento (callback) pode ser o que o leitor desejar. Note que como tal procedimento é carregado na abertura do documento, ele funciona como um Auto_Open ou Workbook_Open (ou até mesmo uma inicialização de classe). Antes mesmo de escrevemos o nosso XML, precisaremos adicionar um módulo comum onde o codigo abaixo deve ser entrado (caso o leitor não acompanhe o significado, não se preocupe, pois todo o processo será amalgamado mais adiante e todo o processo fará mais sentido): 'Declaracao do objeto "IRibbonUI" global Sub setarRibbon(ribbon As IRibbonUI) Primeiramente, declaramos globalmente o objeto que representará a nossa Faixa de Opções (Ribbon). Dentro do procedimento declarado no atributo onLoad, nós setamos o objeto declarado globalmente no módulo como sendo o ribbon. A segunda parte importante diz respeito a invalidação do ribbon. Isso será necessário para forçarmos a chamada do procedimento que ocultará/reexibirá o grupo em questão. Invalidando a chamada do callback (ribbonX.Invalidate)Na versão Beta 2 era desnecessário invalidar o ribbon, pois o callback era constantemente chamado. Este comportamente era, na verdade, um bug o qual tinha conseqüências relevantes a outras partes de seu código. Agora, para que o procedimento específico seja chamado precisamos invalidar o ribbon para que o procedimento seja executado. Aqui, o procedimento será executado de acordo com a guia. Como teremos duas guias, quando uma guia for selecionada ela executará o código referente a ela. Para melhor explicar isso, vejamos o seguinte cenário:
Para invalidar o ribbon usamos o método Invalidate: ribPersonalizado.Invalidate Este tópico é somente para explicar o que ocorre no processo de invalidação do ribbon, pois o mesmo terá conseqüências na escrita de nosso VBA. No próximo tópico veremos o código XML para criação de nossa interface. Determinando o XMLComo as explicações dadas, vejamos como ficará o nosso código XML. Comentários são adicionados nos pontos discutidos. O leitor deve estudar atendamente o código abaixo em relação ao que foi explicado e será apresentado adiante no código VBA: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="setarRibbon"> <group <!-- Adiciona o boto de alternncia - toggleButton --> <!-- Adiciona caixa de checagem - checkBox --> <!-- Adiciona caixa de checagem - checkBox --> <!-- Adiciona um grupo para adicionarmos o splitButton e respectivos botões --> <splitButton <button <menu <button <button <button </tab> <tab idMso="TabHome"> <!-- Adicionar um callback para o atributo "getVisible" --> <tab idMso="TabInsert"> </tabs> Determinando o VBAO leitor deve notar que o atributo getVisible gera um callback, portanto quando a guia que contiver o grupo que desejamos ocultar/exibir estiver ativa, haverá uma chamada no VBA. Isso quer dizer que não será possível colocar o código em “break” para debug. Como o callback terminará a chamada assim que tenha sido executado, precisamos invalidar o Ribbon para que o callback seja chamado. Vejamos, portanto, como ficará o nosso código VBA. Primeiramente adicione o código abaixo no VBE da pasta de trabalho: Option Explicit 'Determina se a primeira chamada no callback de ocultar/exibir 'Veja explicação acima. O mesmo se aplica 'Variável booleana para determinar se o callback ocorreu 'Variável global representando o nosso riboon a ser setado Sub setarRibbon(ribbon As IRibbonUI) ' MsgBox "ola" 'Debug apenas ' Setar o objeto Sub alternado(control As IRibbonControl, pressed As Boolean) ' Caso contrário, mostrar esta mensagem: Sub ocultarGrupoFonte(control As IRibbonControl, pressed As Boolean) ' Determina o valor da variável para ocultar/exibir o grupo Sub ocultarGrupoTabelas(control As IRibbonControl, pressed As Boolean) ' Determina o valor da variável para ocultar/exibir o grupo ' Invalida o ribbon para execução do callback durante a seleção de uma guia Sub fechar(control As IRibbonControl) Sub altGrpFonte(control As IRibbonControl, ByRef returnedVal) ' Alterna entre oculto e visível. Se o valor para a variável global Sub altGrpTbl(control As IRibbonControl, ByRef returnedVal) ' Alterna entre oculto e visível. Se o valor para a variável global Sub chkCompatbilidade(control As IRibbonControl) Redefinindo/desabilitando a função de um comando interno (“repurpose” e “enable”)Neste tópico discutirei um assunto muito comum no fórum de Excel: como desabilitar determinado comando? Muitas vezes o leitor deseja desabilitar um determinando comando no Excel (como “Imprimir”, por exemplo) para que o usuário final não possa imprimir o documento. A partir da versão 97 é possível efetuar tal redefinição/desabilitação de comandos, contudo, o trabalho era por demais exagerado, pois tínhamos que desabilitar cada comando individualmente. Por exemplo, podemos imprimir atráves do menu “Arquivo” ou através de um botão na barra de ferramentas. Precisaríamos desabilitar ambos. Não obstante, se houvesse outra instância deste botão o usuário ainda assim poderia imprimir. Além disso, teríamos o problema óbvio de diferentes índices para determinado comando em versões diferentes o que dificulta ainda mais o trabalho em termos de compatibilidade. Agora, podemos pular esta trabalheira toda redefinindo o comando diretamente no XML do CustomUI. Aqui, temos duas opções:
Vejamos a seguir cada um separadamente. Desabilitando um comando globalmenteNossa primeira parada será desabilitar um comando qualquer globalmente. Observe a figura abaixo:
O nosso objetivo é desabilitar a possibilidade de colagem desabilitando o camando “paste” (colar) através do código XML. Crie um novo documento onde adicionaremos o seguinte código XML: <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> Primeiramente abrimos o bloco referente aos comandos determinado por commands e em seguida especificamos qual comando deve ser desabilitado utilizando o atributo enabled e setando o seu valor para false (falso, isto é, desabilitado).
O leitor deve estar atento que tal modificação tem efeito global e não será aplicado somente no arquivo que contém o XML, mas na sessão aberta do Excel. Finalmente, ao desabilitarmos o comando o atalho de teclado associado a ele não é desabilitado. Isso implica que o usuário final poderá colar mesmo com o botão desabilitado como mostrado acima. Uma solução é utilizarmos o método “OnKey” do aplicativo para determinar o conjunto de atalho a ser desabilitado. Podemos fazer isso da seguinte maneira: Sub desabilitarAtalhoColar() Sub desabilitado() Sub habilitarAtalhoColar() Para terminar, adicione os seguintes procedimentos ao VBE da pasta de trabalho: Private Sub Workbook_BeforeClose(Cancel As Boolean) Private Sub Workbook_Open() Ao tentar utilizar a tecla de atalho o usuário será informado da impossibilidade:
Vejamos agora como modificar o propósito original de um comando. Redefinindo o propósito de um comando (repurpose)Quando clicamos em um botão como o de colar, nós esperamos que algo seja colado. Da mesma forma, quando clicamos em “Imprimir” esperamos que a janela de impressão seja aberta para definirmos as propriedades de impressão. A redefinição de um comando funciona de forma similar ao que fizemos antes utilizando o método “OnKey”. No exemplo, redefinimos o propósito original para outro onde ao invés de ocorrer a colagem de dados o usuário recebe uma mensagem. Suponhamos que o objetivo seja trocar o comando “Paste” (Colar) pelo comando “Copy” (copiar) quando ocorrer o clique no botão. Primeiramente, definimos o nosso XML como segue: <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> O nome da macro pode ser qualquer coisa que o leitor queira. Neste caso, a chamo de “copiar”. Salve o arquivo e gere o callback para o atributo onAction. Agora, abra o arquivo Excel onde iremos colar e programar o callback como segue: Sub copiar(control As IRibbonControl, ByRef cancelDefault) Ao utilizar o botão de colagem a seguinte mensagem é mostrada ao usuário:
|
|||
| « Anterior | Δ Página principal | ¤ Índice | Próxima » |
|
Quer Aprender VBA no
Excel, Sem Dificuldades, com Exemplos |
||
|
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 |
||
|
|
MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI (Online, Vitalício, Prático e Atualizado)! |
|
|
NÃO PROCURE VAGAS, SEJA PROCURADO! |
|
Para Todos os Detalhes, Acesse:
https://juliobattisti.com.br/curso-infra-ti.asp
|
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-2025 ®
LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO
DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI