Navegar pelas planilhas de maneira elegante

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.

24 comentários em “Navegar pelas planilhas de maneira elegante”

  1. 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

    Responder
    • 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

      Responder
  2. 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???

    Responder
  3. 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.

    Responder
    • 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.

      Responder
    • 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

      Responder
  4. 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

    Responder
    • 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!

      Responder
  5. 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?

    Responder
  6. 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,

    Responder
  7. 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,

    Responder
    • 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ç

      Responder
    • 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

      Responder
  8. 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?

    Responder
          • 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ç

Deixe uma resposta para Gabriel Cancelar resposta