Olá amigos.
Estive um pouco ausente esses dias. O motivo é que estou migrando o meu blog para uma plataforma mais amigável e personalizada. Devido a enorme aceitação dos leitores, fez-se necessário oferecer um ambiente mais agradável e adaptável ao nosso olhar. Enfim… está dando um trabalhinho a mais. Porém valerá a pena.
Bom, hoje minha dica será pequena mas bastante usual. Ficará disponível para vocês adaptarem ao critério e usarem nos seus trabalhos. Vamos a ela.
Mostrarei como é possivel mover-se pelas diversas planilhas em um determinado arquivo do Excel usando controles personalizados de acordo com a usabilidade que pretendemos disponibilizar. Quando queremos ir de uma planilha para outra, usamos aquelas abinhas na parte inferior do excel, correto? Por exemplo, estamos na Plan1 e queremos ir para a Plan2, então clicamos na aba Plan2. Até aí, nada de mais. Imagine que tenhamos umas 100 planilhas. Temos que ficar procurando a aba correspondente para selecioná-la. Minha sugestão, entre muitas outras que podemos usar, é criar uma caixa de seleção, dessas drop-down, onde estarão listadas todas as planilhas, e por essa caixa, apontaremos a planilha que queremos ir.
Um exemplo, temos uma planilha com todas as diciplinas escolares. As disciplinas são os nomes das planilhas. Vamos projetar um campo que liste todas as planilhas e execute a navegação por cada uma delas. Vamos trabalhar!
Primeiro, renomeie a plan1 para “PlanInicio”. Em seguida adicione tantas planilhas quanto necessário para figurar as disciplinas e nomeie-as com seus respectivos títulos, Matemática, Português, História, etc.
Na PlanInicio, adicionaremos 1 caixa de combinação (presente na toolbox: caixa ferramentas de controle) e daremos o nome “cbo_ExibePlanilha”.
Vá ao editor do VBA (ALT+F11) e clique duas vezes sobre a PlanInicio e digite o código:
Private Sub cbo_ExibePlanilha_Change()
On Error GoTo Erro
'Se não for vazio
If cbo_ExibePlanilha.Text <> "" Then
'Seleciona a planilha escolhida
ThisWorkbook.Worksheets(cbo_ExibePlanilha.Text).Select
End If
Exit Sub
Erro:
MsgBox Err.Description
Exit Sub
End Sub
Private Sub Worksheet_Activate()
On Error GoTo Erro
Dim sh As Worksheet
'Limpa a combo
cbo_ExibePlanilha.Clear
'Lista todas as planilhas
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> ActiveSheet.Name Then
cbo_ExibePlanilha.AddItem sh.Name
End If
Next sh
Exit Sub
Erro:
MsgBox Err.Description
Exit Sub
End Sub
Adicione, em seguida, um módulo e insira o seguinte código:
Sub VoltarParaInicio()
ThisWorkbook.Worksheets("PlanInicio").Select
End Sub
Esse código servirá para executar o retorno à PlanInicio. E será adicionado ao botão retornar que será colocado em cada planilha de disciplina, da seguinte maneira.
Adicione um botão da caixa de ferramentas “Formulário”, pois com ele é possível adicionar uma macro de maneira bem rápida.
Na caixa que aparecerá na tela, atribua a macro “VoltarParaInicio”.
Selecione, com o botão direito do mouse, o botão criado e clique em “copiar”. E cole esse botão em cada planilha de disciplina.
Salve seu projeto. E agora já poderá movimentar-se pelas planilhas e retornar para a Planilha Inicial através de ferramentas personalizadas de maneira que atendam as necessidades de seus projetos.
E… não se esqueçam. Se quiserem um projeto avançado e totalmente personalizado que atendam as suas expectativas, podem falar comigo pelo link Orçamento. Presto soluções bem interessantes e com baixo custo.
Um abraço a todos.
não consigo renomear a caixa combo, ao abrir a propriedade opçãp do mesmo não há algum lugar que posso colocar o nome, e qdo for apertar alt e f11 a combo deve estar selecionado
Para renomear a combo você deve alterar o valor (Name) na caixa de propriedades. Quando a aba “Alfabético” na caixa de propriedades estiver selecionada, será a primeira opção exibida. Lembro a você que se alterar o nome da combo deverás alterar a Sub no código VBA, Ok?!!! Abraço
Por mais que eu tente não consegui fazer funcionar esse código… o segundo já está sendo muito útil, mas como a cada semana tenho q criar uma nova aba… esta cada dia mais dificil criar um botão para cada aba…. não sei o que estou fazendo de errado…. pois acertei o nome do combo, e fiz com muito cuidado…. por acaso teria como mandar um arquivo para que possa entender também qual é o meu erro???
Gabriel,
Acredito que seu erro possa ser pq no código escrito aqui o site foi alterado para codificação HTML e eu não percebi.
Ocorre onde está assim:
Private Sub cbo_ExibePlanilha_Change()
On Error GoTo Erro
'Se não for vazio
If cbo_ExibePlanilha.Text <> "" Then
...
Onde aparece <> era pra estar , que significa diferente de. Mas em HTML servem para identificar tags.
Mas caso não seja isso, no final deste artigo tem um link para download.
Adiantando pra vc:
https://www.exceldoseujeito.com.br/wp-includes/sources/NavegarPelasPlanilhas.rar
Abraço.
muito obrigado pela ajuda….
mais uma coisa, estando as planilhas ocultas, existe alguma forma de fazer isso?
Sim. Mas, primeiro, você teria que reexibir a planilha que deseja selecionar, usando o ThisWorkbook.Worksheets(“NomeDaPlanilhaQueVaiSelecionar”).Visible = True
Ok?!!!
Muito obrigado… mas 😛
nossa, to enchendo sua paciencia….
mas vamos lá,
a minha idéia inicial seria ocultar as abas somente para vizualização… de forma que só pudesse se mover pela planilha atravéz desse artifício (do jeito elegante)ou por botões, diminuindo as chances das pessoas ficarem brincando com a ordem das planilhas, ou fazendo besteiras… obrigado pela atenção novamente.
Gabriel,
Você pode criar uma Rotina para ocultar as abas das planilhas ao abrir o arquivo (Workbook_Open) ou incluí-la na rotina, já existente, de ativação da planilha (Worksheet_Ativate). Assim:
ActiveWindow.DisplayWorkbookTabs = False
Isso faz com que as abas fiquem ocultas.
Espero ter ajudado.
Só uma dúvida,
o que está ocorrendo pois aparece sempre a mensagem “o objeto é obrigatório” quando retorno a pagina inicial?
Não posso dizer com certeza o que está ocorrendo, pode ser a ausencia de algum controle ou o bloqueio deste, enfim, várias possibilidade.
Faça assim, comente a análise de erros no procedimento Worksheet_Activate, colando uma aspas simples (‘) antes de On Error GoTo Erro.
Rode a planilha. A linha que apresentar erro ficará destacada em amarelo.
Poste aqui que vou analisar.
A princípio na planilha de exemplo que eu testei está sem problemas aqui.
Abraço
Bom dia!
Seu tutorial esta excelente e facil de entender.
Porém quando executo a comobobox não é carregada, tenho que clicar em outra planilha para carrega-la, existe a possíbilidade de carrega-la qndo abro o Excel.
Obrigada
Olá, Simone!
Para que a combobox seja carregada automaticamente quando o arquivo for aberto, basta colocar o mesmo código que está na ativação da planilha no método Workbook_Open da Pasta de Trabalho. Somente, tenha atenção para identificar o nome da combo e em qual planilha ela está. O código abaixo já está adaptado corretamente.
Insira-o no módulo de classe EstaPastaDeTrabalho, ok?!!
Private Sub Workbook_Open()
On Error GoTo Erro
Dim sh As Worksheet
'Limpa a combo
Worksheets("PlanInicio").cbo_ExibePlanilha.Clear
'Lista todas as planilhas
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> ActiveSheet.Name Then
Worksheets("PlanInicio").cbo_ExibePlanilha.AddItem sh.Name
End If
Next sh
Exit Sub
Erro:
MsgBox Err.Description
Exit Sub
End Sub
Abraço!
Testei o exemplo e ficou beleza…
Agora, me der uma ideia se no caso eu colocasse
nesse mesmo projeto mais um combobox
para nome da escola.
No primeiro Combobox (Matematica etc…)
No segundo Combobox (Escola João etc…)
Como faço?
Alguem tem algum exemplo, de como colocar 2 combobox
em uma planilha? SENDO QUE O PRIMEIRO COMBOBOX
NAVEGA NA PLANILHA-1, 2 e 3. E SEGUNDO COMBOBOX NAVEGA PELA PLANILHA 4, 5 e 6.
Grato,
Olá Pessoal?
Como faço uma Planilha (Menu) com dois COMBOBOX,
onde o primeiro Combobox navega pela Plan1 – Plan2 e Plan3.
Enquanto o segundo Combobox navega pela Plan4 – Plan5 e Plan6.
Alguém tem algum exemplo?
Grato,
Robson,
Você pode definir manualmente as planilhas para cada combobox que você colocar no menu. Uma sugestão é você alterar o código que está no Evento Private Sub Wooksheet_Activate(), veja:
[code]
Private Sub Worksheet_Activate()
On Error GoTo Erro
Dim sh As Worksheet
‘Limpa a combo
cbo_ExibePlanilha1.Clear
cbo_ExibePlanilha2.Clear
‘Lista todas as planilhas para a 1a. combobox
cbo_ExibePlanilha1.AddItem “Nome da Planilha 1”
cbo_ExibePlanilha1.AddItem “Nome da Planilha 2”
cbo_ExibePlanilha1.AddItem “Nome da Planilha 3”
‘Lista todas as planilhas para a 2a. combobox
cbo_ExibePlanilha2.AddItem “Nome da Planilha 4”
cbo_ExibePlanilha2.AddItem “Nome da Planilha 5”
cbo_ExibePlanilha2.AddItem “Nome da Planilha 6”
Exit Sub
Erro:
MsgBox Err.Description
Exit Sub
End Sub
Boa sorte, abrç
Bom dia, como seria a plan se eu tivesse dois combobox, ou seja, 1 combobox por planilha?
Bom dia, Vinicius.
Pelo que entendi, você queria exibir em cada planilha a lista de todas as demais planilhas da Pasta de trabalho.
Bem. Neste caso, você, primeiramente, é claro, deveria adicionar em cada planilha, um combobox, de preferência com o mesmo nome [cbo_ExibePlanilha], para facilitar a inserção do código.
Em seguida, elimine a subrotina Private Sub Worksheet_Activate() da Plan1. Deixe apenas a subrotina Private Sub cbo_ExibePlanilha_Change(). O código de cada planilha seria apenas o descrito abaixo:
Private Sub cbo_ExibePlanilha_Change()
On Error GoTo Erro
If cbo_ExibePlanilha.Text <> “” Then
ThisWorkbook.Worksheets(cbo_ExibePlanilha.Text).Select
End If
Exit Sub
Erro:
MsgBox Err.Description
Exit Sub
End Sub
ATENÇÃO: Replique este codigo em todas as planilhas.
Agora, você precisa acessar o módulo de classe EstaPasta_de_trabalho e inserir o código abaixo:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error GoTo Erro
Dim Outras_Sh As Worksheet
Sheets(Sh.Name).cbo_ExibePlanilha.Clear
For Each Outras_Sh In ThisWorkbook.Worksheets
If Outras_Sh.Name <> Sh.Name Then
Sheets(Sh.Name).cbo_ExibePlanilha.AddItem Outras_Sh.Name
End If
Next Outras_Sh
Exit Sub
Erro:
MsgBox Err.Description
Exit Sub
End Sub
Salve o projeto.
Espero ter ajudado.
Abraço.
End Sub
olá reinaldo, primeiramente gostaria de agradecer pela velocidade com que vc respondeu o topico e parabenizar pelo site, que realmente eh mto bom. Tentei fazer conforme vc escreveu em cima, mas não deu certo. Não entendo mto de vba mas pelo que me parece o codigo esta errado nas seguintes linhas:
If cbo_ExibePlanilha.Text “” Then
If Outras_Sh.Name Sh.Name Then
tentei corrigi-las deixando assim:
If cbo_ExibePlanilha.Text “” Then
If Outras_Sh.Name ActiveSheet.Name Then
Não sei se fiz certo, pois como disse naum entendo mto d vba. Mas depois que corrigi a plan parcialmente funcionou, porém a minha intenção naum eh ter o combobox em todas as planilhas, mas sim em apenas duas, entaum percebi que qdo navego entre as planilhas que contem o combobox, td ocorre bem, mas qdo navego em uma plan que naum tem o combobox, aparece o seguinte erro: O ambiente não aceita este ambiente ou método. Como posso evitar tal erro?
Retificando o segundo corrigido ficou assim:
If cbo_ExibePlanilha.Text “” Then
Vinícius,
Já está corrigido lá.
O sinal de diferente “<>” foi suprimido na conversão do html. Agora está ok.
Abraço.
ok..mas msm com a correção, o erro citado no post anterior ainda acontece.
abraço
Reli o seu post… e entendi melhor o que você quer e qual o erro está apresentando.
No seu caso, como são apenas em duas planilhas que você quer utilizar a função, seria melhor a utilização do código Original do artigo em cada módulo de planilha.
Ou seja, apague este código que te passei anteriormente e insira os códigos originais publicados no artigo em cada planilha.
A solução que eu estava lhe apresentado era para reutilizar o código evitando digitação excessiva e uso de memória.
Agora deve ficar legal.
Abç