Ir ao conteúdo
  • Cadastre-se

Macro para Renomear abas de acordo com uma Lista


nandarangel

Posts recomendados

Bom dia pessoal,

Não sou experiente com macros e me vi com uma necessidade enorme de criar uma. Tenho um arquivo de excel com cerca de 100 abas e cada aba se refere a um centro de custo, só que a contabilidade está sempre alterando os nomes desses centros.

Percebi que não posso fazer isso a mão, então na primeira planilha montei um "De - Para", fiz uma lista com os nomes que tenho hoje na coluna A e na coluna B coloquei os nomes correspondentes que precisam ser alterados.

Preciso de uma macro que busque as planilhas da coluna A e renomeie para sua correspondente na coluna B.

Já busquei em vários tópicos e encontrei alguns códigos próximos, mas não sei como especificar dentro do VBA e gravar macro é inviável!

É possível? Preciso muito de ajuda!!!:(

Link para o comentário
Compartilhar em outros sites

Application.ScreenUpdating = False

'insere variável novo nome da aba
Dim novonome As String

'varre todos os nomes na coluna A
'(a partir da linha 2 devido a cabeçalho)
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
'nome escrito em B
novonome = Cells(i, 2)
'seleciona aba
Sheets(i).Select
ActiveSheet.Name = novonome
'volta na aba inicial
[COLOR="Red"]Sheets(1).Select[/COLOR]
Next

'habilita atualização de tela
Application.ScreenUpdating = True

End Sub

Rode a macro com a aba que contém a lista selecionada (ou seja, visível, na tela).

Substitua Sheets(1).Select por Sheets("nome da aba com a lista").Select

Novos nomes contendo caracteres como / e :, por exemplo, darão erro pois o excel não aceita.

Dê retorno.

Link para o comentário
Compartilhar em outros sites

Olá, obrigada por responder!!!

Deletei as linhas da minha aba principal e rodei o código de novo, mas agora o erro é em outra linha:

Sub Renomear_Abas()

Application.ScreenUpdating = False

'insere variável novo nome da aba
Dim novonome As String

'varre todos os nomes na coluna A
'(a partir da linha 2 devido a cabeçalho)
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
'nome escrito em B
novonome = Cells(i, 2)
'seleciona aba
[B][COLOR="Red"] Sheets(i).Select[/COLOR][/B]
ActiveSheet.Name = novonome
'volta na aba inicial
Sheets("Listar Abas").Select
Next

'habilita atualização de tela
Application.ScreenUpdating = True

End Sub

Link para o comentário
Compartilhar em outros sites

Entendi, acabei de alterar aqui e o erro agora é em outra linha:

For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row

'nome escrito em B

novonome = Cells(i, 2)

'seleciona aba

Sheets(i).Select '(linha com erro!)

ActiveSheet.Name = novonome

'volta na aba inicial

Sheets("Listar Abas").Select

Next

Link para o comentário
Compartilhar em outros sites

Falha minha:

Sub Renomear_Abas()

Application.ScreenUpdating = False

'insere variável novo nome da aba
Dim novonome As String

'varre todos os nomes na coluna A
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
'nome escrito em B
novonome = Cells(i, 2)
'seleciona aba
[COLOR="Red"]Sheets(Cells(i, 1)).Select[/COLOR]
ActiveSheet.Name = novonome
'volta na aba inicial
Sheets("Listar Abas").Select
Next

'habilita atualização de tela
Application.ScreenUpdating = True

End Sub

Link para o comentário
Compartilhar em outros sites

jeffsilveira,

Agora apareceu um erro em outra linha. Fiz upload como você solicitou, de um exemplo, sendo que a que tenho terá cerca de 100 abas...

Os nomes da coluna A se referem às planilhas existentes e a B, ao nome que cada aba deverá realmente ter.

http://www.sendspace.com/file/oqnlts

Link para o comentário
Compartilhar em outros sites

Sub Renomear_Abas()

'desabilita atualização de tela
Application.ScreenUpdating = False

'insere variável novo nome da aba
Dim novonome As String

'formata coluna A como texto
Columns("A:A").NumberFormat = "@"

'varre todos os nomes na coluna A
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
'nome escrito em B
novonome = Cells(i, 2)
'seleciona aba
Sheets(Range("A" & i).Text).Select
ActiveSheet.Name = novonome
'volta na aba inicial
Sheets("Listar Abas").Select
Next

'habilita atualização de tela
Application.ScreenUpdating = True

End Sub

Link para o comentário
Compartilhar em outros sites

jeffsilveira,

Desculpe te incomodar tanto! e te agradeço muito por toda essa ajuda!

Quando executei o código para testar, funcionou perfeitamente!

Mas em seguida quando criei um botão para atribuir a macro, sempre que chego na linha: Sheets(Range("A" & i).Text).Select acontece um novo erro...

http://www.sendspace.com/file/c3e0ec

mais uma vez, obrigada!

Acho que entendi qual é o problema.

Quando a macro não encontra o nome da coluna A, não executa o código.

Quando eu faço a primeira vez ela renomeia aba a aba de acordo com a coluna B, e o nome da aba passa a ser o da coluna B, não mais a coluna A.

Acho que o que precisava é muito mais simples: uma macro para listar abas na coluna A e a coluna B ser a que eu vou fazer as alterações.

O que quero dizer é que a coluna A teria que ser definida por uma macro de listar abas, para depois usar o código que você fez acima, renomear as respectivas para B.

Link para o comentário
Compartilhar em outros sites

...fiz uma lista com os nomes que tenho hoje na coluna A e na coluna B coloquei os nomes correspondentes...

Entendi que você fez a lista em A manualmente, por isso não observei esse 'detalhe' na macro. Faço conforme me é explicado.

A macro abaixo nomeia em A todas as abas a partir da segunda:

Sub nomes()

For i = 2 To Worksheets.Count
Cells(i, 1) = Sheets(i).Name
Next

End Sub

Link para o comentário
Compartilhar em outros sites

Bom dia,

Tentei com o código que você me passou, mas deu erro de depuração também. Com as informações das respostas, tentei montar este, mas também não funciona.. na verdade ele para na aba 20.

Sub Renomear_coluna_B()

Dim celula As range

'seleciona coluna B
range("B:B").Select

'insere variável novo nome da aba
Dim novonome As String

'formata coluna B como texto
Columns("B:B").NumberFormat = "@"

'varre todos os nomes na coluna B
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row

'nome escrito em B
novonome = Cells(i, 2)

'seleciona aba
'aqui acontece o erro!!!
[COLOR="Red"]Sheets(range("B" & i).Text).Select[/COLOR]
ActiveSheet.Name = novonome

'volta na aba inicial
Sheets("Listar Abas").Select
Next

End Sub

Sub maiuscula()

Dim xcell
For Each xcell In Selection
xcell.Value = UCase(xcell.Value)

Next xcell

End Sub

Link para o comentário
Compartilhar em outros sites

nandarangel, o que você precisa é simples, não tem porque estar dando tanto erro!

No exemplo que você postou aqui funcionou. Com adaptações, claro, já que na célula fica 20.113.022 e a aba se chama 20113022. Por isso de passar para texto antes. Fora outros tratamentos.

Mas novamente você está confundindo os códigos, pois Sheets(range("B" & i).Text).Select serve para selecionar uma aba, mas se ela não existir dará erro.

Mande-me por MP a original, se possível, para garantir sua privacidade.

Faço e rodo o código e depois posto aqui a macro da solução, sem revelar seus dados.

Se for possível, claro.

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...