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 » |
| Criando menus, barras de comando e botões personalizados no Excel usando VBA Autor: Robert Friedrick Martim |
||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Lição 008 - Menus "dropdown" | ||||||||||||
Os menus tipo dropdown (também chamados de combobox) são os menus que contém uma lista que quando clicada disponibiliza os itens da lista para o usuário. A figura abaixo mostra o exemplo clássico do Excel:
Figure 8‑1 Através desta lista podemos selecionar a visualização de nossa área de trabalho, isto é, podemos ampliar ou reduzir o tamanho da área de trabalho conforme necessário. O exemplo que estaremos olhando é retirado de uma de minhas respostas no fórum sobre este assunto. Contudo, a resposta no fórum utiliza apenas uma das possibilidades. Aqui estaremos vendo como construir este tipo de combobox de uma forma diferente. A nossa combobox conterá uma lista de todas as planilhas disponíveis na pasta de trabalho e quando um item da lista é selecionado a planilha em questão é selecionada. Este método pode ser interessante se possuímos um número elevado de planilhas ou se desejamos esconder as guias das planilhas, por exemplo. O menu que construiremos é mostrado na figura abaixo:
Figure 8‑2 Primeiramente, vamos definir o nome da barra de comando como sendo uma Public Const (constante pública). No topo do módulo devemos entrar a seguinte linha: Public Const CMDBARNOME As String = "Menu combobox" O nome da constante pode ser qualquer coisa que o leitor desejar. Agora, a constante CMDBARNOME pode ser acessada de qualquer sub-rotina que escrevemos sem a necessidade de redimensioná-la. O próximo passo é a construção do menu:
O ListIndex da combobox é colocado para 1, pois queremos que o primeiro item da lista seja selecionado. Se pularmos esta linha, o primeiro item da lista aparece em branco como mostram as figuras abaixo:
Figura 0‑24
Figura 0‑25 Este é apenas um detalhe e fica a critério do leitor definir em qual modo se pretende apresentar a barra de comando. Com a barra de comando e o btnDropDown prontos, precisamos definir a macro que executa o OnAction. Em nosso código chamamos esta macro de “wsAcessar”. Quando um dos itens da lista é selecionado esta sub-rotina é executada.
A dimensão wsÍndice refere-se ao índice do item na btnDropDown. Contudo, como este é o índice referente à planilha, também, podemos utilizar valor para ativar a planilha selecionada na lista. Outro ponto a ser observado é que podemos dispensar o wsÍndice e escrever somente uma linha de código nesta sub-rotina: ThisWorkbook.Sheets(CommandBars(CMDBARNOME). _ Controls(1).ListIndex).Activate Portanto, podemos cortar o dimensionamento de wsÍndice e a linha que o define como sendo igual ao índice do item selecionado no controle btnDropDown. Infelizmente, o método anterior deixa várias perguntas no ar: e se uma planilha for removida ou adicionada? E se uma planilha mudar de posição? Se fizermos isso, veremos que o método anterior falha em nos fornecer as respostas às questões colocadas. A solução é rever o método utilizado e procurar uma solução melhor. Contudo, soluções não são vendidas em latinhas no mercado da esquina e precisamos pensar em uma maneira mais eficiente e pesquisar uma solução. Em programação uma solução não existe até que ela seja inventada. O próximo exemplo utiliza uma Class para inventar uma resposta para nossa questão. Primeiro, vamos definir o problema. Como a Class manipula os eventos e as propriedades, estamos interessados em uma classe que:
A primeira parte requer a definição do evento que desejamos capturar: Public WithEvents appXL As Application Os eventos são referentes ao aplicativo Excel. Veja que a definição é pública como fizemos com a constante do nome de nossa barra de comando. Assim como definimos a constante como sendo um String aqui definimos os eventos sendo capturados como sendo Application. A seguir, escrevemos o código que manipulará o evento dentro da classe. Primeiramente, capturaremos os eventos que ocorrem na pasta ativa e dizem respeito às planilhas desta pasta:
Após a definição do objeto btnDropDown, limpamos quaisquer valores que estão presentes no btnDropDown. Embora neste exemplo isto não seja crítico é boa prática sempre limpar qualquer lista antes de adicionar uma lista nova. Com o objeto ws fazemos, agora, um loop em todas as planilhas presentes na pasta ativa. Utilizamos o método AddItem como fizemos em nosso primeiro exemplo. Finalmente, checamos o índice do btnDropDown e casamos este valor com o índice e nome da planilha a qual ele se refere. Como isso terminamos a captura dos eventos ocorridos nas planilhas. Agora, precisamos capturar os eventos da pasta de trabalho. Aqui, teremos menos trabalhos pois queremos apenas saber a pasta atual para que o evento da planilha seja reprocessado. Assim sendo, tudo que desejamos saber é quando uma pasta nova é ativada para que o evento da planilha seja rodado:
Quando uma pasta de trabalho (workbook) é ativada o evento para a planilha é rodado e definido como a planilha ativa (ActiveSheet) na pasta de trabalho atual (AtiveWorkbook). Quando o evento ocorre as planilhas listadas no btnDropDown são as da pasta ativa. Para terminar precisamos construir nossa barra de comando contendo a combobox. Depois das várias construções anteriores, não há segredo algum nesta construção, apenas algumas novidades:
Primeiramente, precisamos acessar as informações contidas na Classe1. Para fazer isso dimensionamos um objeto (neste caso appExcel) como uma nova classe que é referida como a classe por nós criada. Em seguida criamos nosso menu como fizemos anteriormente. Quando definimos as propriedades do btnDropDown acrescentamos um Tag ao btnDropDown pois é este o valor sendo procurado na Classe1 através do FindControl. Finalmente, definimos a propriedade appXL da dimensão appExcel como sendo o aplicativo (Application). O restando do código já foi discutido, sendo desnecessário explicar novamente. O código anterior criar o menu e aplica os eventos ao menu. Porém, ainda precisamos definir a sub-rotina que ativa a planilha selecionada na lista. Esta sub-rotina foi chamada de selPlanilha na propriedade OnAction:
Mais uma vez utilizamos a Tag para encontrar o controle btnDropDown. Quando o controle é encontrado, instruímos o Excel a selecionar a planilha cujo nome é igual ao texto contido no btnDropDown. Terminamos aqui a solução de nosso problema. |
||||||||||||
| « Anterior | Δ Página principal | ¤ Índice | Próxima » |
|
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-2026 ®
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