Ir ao conteúdo

Excel Macro para Copiar e Renomear Planilha


Ir à solução Resolvido por Visitante,

Posts recomendados

Postado

Olá, Boa Tarde!!

 

Gostaria de ajuda na planilha em anexo...


Criar uma MACRO que quando eu clicar na planilha "2020" e pedir para Copiar essa planilha, ela copie uma nova planilha igual essa logo na frente da planilha "2020", só que com o ano seguinte = "2021". E assim sucessivamente.

 

A MACRO também precisa mudar a Célula A1 para o ano que vai dar nome a planilha

 

Não sei se expliquei bem.... mas caso negativo, peçam novas informações aqui que vamos informando!

2020.xlsx

Muito obrigado e abraços

 

 

2020.xlsx

Postado

 

Experimente:

 

Sub FazCópiaDaPlanilhaAtiva()
 ActiveSheet.Copy After:=Sheets(Sheets.Count)
 [A1] = [A1] + 1
 ActiveSheet.Name = [A1]
End Sub

 

Postado
13 horas atrás, osvaldomp disse:

 

Experimente:

 


Sub FazCópiaDaPlanilhaAtiva()
 ActiveSheet.Copy After:=Sheets(Sheets.Count)
 [A1] = [A1] + 1
 ActiveSheet.Name = [A1]
End Sub

 

 

@osvaldomp Obrigado pela ajuda. Mas não consegui colocar para funcionar ao clicar na planilha 2020 > Copiar ou Mover > Criar uma Cópia..... 
 

Onde devo colocar essa Sub? 

Postado
50 minutos atrás, KaKaBeCuDo disse:

 

 ... ao clicar na planilha 2020 ..

 

O que exatamente você quer dizer com "clicar na planilha" ?

 

Uma cópia do código que passei deve ser instalada em um módulo comum, assim:
1. copie o código daqui
2. a partir de qualquer planilha tecle 'Alt+F11' para acessar o editor de VBA
3. no menu do editor / Inserir / Módulo
4. cole o código na janela em branco que vai se abrir
5. feito! 'Alt+Q' para retornar para a planilha e testar

para rodar o código:
6. ative a planilha da qual deseja fazer cópia tecle 'Alt+F8' / selecione a macro correspondente / Executar, ou insira um botão na planilha e vincule-o à macro ou vincule-a a um atalho de teclado (Alt+F8 / Opções). Recomendo esta última opção.
Essas três opções para rodar o código podem ser implantadas isoladamente ou em conjunto.

 

 

Postado

 

1 minuto atrás, osvaldomp disse:

 

O que exatamente você quer dizer com "clicar na planilha" ?

 

Uma cópia do código que passei deve ser instalada em um módulo comum, assim:
1. copie o código daqui
2. a partir de qualquer planilha tecle 'Alt+F11' para acessar o editor de VBA
3. no menu do editor / Inserir / Módulo
4. cole o código na janela em branco que vai se abrir
5. feito! 'Alt+Q' para retornar para a planilha e testar

para rodar o código:
6. ative a planilha da qual deseja fazer cópia tecle 'Alt+F8' / selecione a macro correspondente / Executar, ou insira um botão na planilha e vincule-o à macro ou vincule-a a um atalho de teclado (Alt+F8 / Opções). Recomendo esta última opção.
Essas três opções para rodar o código podem ser implantadas isoladamente ou em conjunto.

 

 

@osvaldomp Desculpe, não me expressei direito.... clicar na aba

 

image.png.91808d83bdd64e58033946da3ea4edd6.png

Postado
6 minutos atrás, KaKaBeCuDo disse:

 

 ... clicar na aba  guia (nomenclatura MS)

 

 

Você testou o código ?

 

dica - para responde clique em Responder, abaixo da última postagem. Só clique em Citar se necessário.

Postado

Testei e está funcionando. Coloquei um botão e vinculei a Macro

adicionado 15 minutos depois
14 horas atrás, osvaldomp disse:

 

Experimente:

 


Sub FazCópiaDaPlanilhaAtiva()
 ActiveSheet.Copy After:=Sheets(Sheets.Count)
 [A1] = [A1] + 1
 ActiveSheet.Name = [A1]
End Sub

 

 

Só mais um detalhe.... Eu vou precisar desproteger e proteger a planilha "2020" após clonar ela. Já consegui desproteger, mas não estou conseguindo proteger... Alguma ideia?

 

Postado
30 minutos atrás, KaKaBeCuDo disse:

 Alguma ideia?

 

Nenhuma. Só palpites. 🤪

 

1. como você conseguiu desproteger? manualmente ou via código? se via código então disponibilize-o

2. você "precisa" desproteger só a planilha 2020 ? ou as cópias dela também (2021, 2022, ...) ?

3. você "precisa" desproteger por quais motivos? para inserir/editar dados? se sim, isso pode ser feito pelo código 😏

 

dica - para responde clique em Responder, abaixo da última postagem. Só clique em Citar se necessário.

Postado

1. como você conseguiu desproteger? manualmente ou via código? se via código então disponibilize-o

Via Código. Segue abaixo.

2. você "precisa" desproteger só a planilha 2020 ? ou as cópias dela também (2021, 2022, ...) ?

a 2020 e as cópias dela 2021, 2022...

3. você "precisa" desproteger por quais motivos? para inserir/editar dados? se sim, isso pode ser feito pelo código 

para alterar a célula A1 pela Macro - pois a célula é bloqueada

 

Sub FazCópiaDaPlanilhaAtiva()

 ActiveSheet.Unprotect
 ActiveSheet.Copy After:=Sheets(Sheets.Count)
 [A1] = [A1] + 1
 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
 ActiveSheet.Name = [A1]
  
 SelectSheet = [A1]
 Range("C5:C9,C12:C16,C19:C23,C26:C30,C33:C37,C40:C44,C47:C51,C54:C58,C61:C65,C68:C72,C75:C79,C82:C86").ClearContents
 Range("E5:E9,E12:E16,E19:E23,E26:E30,E33:E37,E40:E44,E47:E51,E54:E58,E61:E65,E68:E72,E75:E79,E82:E86").ClearContents
 Range("F5:F9,F12:F16,F19:F23,F26:F30,F33:F37,F40:F44,F47:F51,F54:F58,F61:F65,F68:F72,F75:F79,F82:F86").ClearContents
 Range("G5:G9,G12:G16,G19:G23,G26:G30,G33:G37,G40:G44,G47:G51,G54:G58,G61:G65,G68:G72,G75:G79,G82:G86").ClearContents
 Range("H5:H9,H12:H16,H19:H23,H26:H30,H33:H37,H40:H44,H47:H51,H54:H58,H61:H65,H68:H72,H75:H79,H82:H86").ClearContents
 Range("K5:K9,K12:K16,K19:K23,K26:K30,K33:K37,K40:K44,K47:K51,K54:K58,K61:K65,K68:K72,K75:K79,K82:K86").ClearContents
 Range("L5:L9,L12:L16,L19:L23,L26:L30,L33:L37,L40:L44,L47:L51,L54:L58,L61:L65,L68:L72,L75:L79,L82:L86").ClearContents
 Range("R4,R11,R18,R25,R32,R39,R46,R60,R67,R74,R81").ClearContents
   
End Sub

Postado
 Sub FazCópiaDaPlanilhaAtiva()
  ActiveSheet.Copy After:=Sheets(Sheets.Count)
  ActiveSheet.Unprotect
  [A1] = [A1] + 1
  ActiveSheet.Name = [A1]
 
 Range("C5:C9,C12:C16,C19:C23,C26:C30,C33:C37,C40:C44,C47:C51,C54:C58,C61:C65,C68:C72,C75:C79,C82:C86").ClearContents
 Range("E5:E9,E12:E16,E19:E23,E26:E30,E33:E37,E40:E44,E47:E51,E54:E58,E61:E65,E68:E72,E75:E79,E82:E86").ClearContents
 Range("F5:F9,F12:F16,F19:F23,F26:F30,F33:F37,F40:F44,F47:F51,F54:F58,F61:F65,F68:F72,F75:F79,F82:F86").ClearContents
 Range("G5:G9,G12:G16,G19:G23,G26:G30,G33:G37,G40:G44,G47:G51,G54:G58,G61:G65,G68:G72,G75:G79,G82:G86").ClearContents
 Range("H5:H9,H12:H16,H19:H23,H26:H30,H33:H37,H40:H44,H47:H51,H54:H58,H61:H65,H68:H72,H75:H79,H82:H86").ClearContents
 Range("K5:K9,K12:K16,K19:K23,K26:K30,K33:K37,K40:K44,K47:K51,K54:K58,K61:K65,K68:K72,K75:K79,K82:K86").ClearContents
 Range("L5:L9,L12:L16,L19:L23,L26:L30,L33:L37,L40:L44,L47:L51,L54:L58,L61:L65,L68:L72,L75:L79,L82:L86").ClearContents
 Range("R4,R11,R18,R25,R32,R39,R46,R60,R67,R74,R81").ClearContents
   
 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

dica - no seu código as 4 linhas abaixo.

 Range("E5:E9,E12:E16,...
 Range("F5:F9,F12:F16,...
 Range("G5:G9,G12:G16,...
 Range("H5:H9,H12:H16,...

 

podem ser substituídas por esta

Range("E5:H9,E12:H16,...

Postado
2 horas atrás, KaKaBeCuDo disse:

 ... só faltou agora proteger a planilha atual através da Macro.

 

Se por "planilha atual" (existe alguma que não seja atual ?) você se refere à planilha 2020, então proteja manualmente e ela permanecerá protegida até alguém desprotegê-la, pois o código não altera o seu estado, ele só faz uma cópia. Ainda, no post #7 você comentou que ela está protegida :tw_confused:

Postado

Pois é, mas isso não acontece. Mesmo eu protegendo ela manualmente (a ATUAL 2020), quando crio a 2021, a planilha 2020 fica desprotegida pela Macro

 

adicionado 5 minutos depois

Só para explicar melhor. Se crio a 2021, daí na 2021 vai ter o botão vinculado à Macro. Se Clico no botão na planilha 2021, cria-se a 2022. porém a 2021 volta a ficar desprotegida....

Postado

Isso está acontecendo porque provavelmente você não está utilizando o código que coloquei no post #10, ou então o meu Excel está com defeito de fabricação, pois aqui o código não desprotege a planilha copiada. 🤪

 

 

Postado

pior que a fórmula está assim conforme abaixo... se eu não estiver muito doido, está igual sua sugestão:

 

Sub FazCópiaDaPlanilhaAtiva()

 Application.ScreenUpdating = False
 ActiveSheet.Unprotect
 ActiveSheet.Copy After:=Sheets(Sheets.Count)
 [A1] = [A1] + 1

 ActiveSheet.Name = [A1]
  
 SelectSheet = [A1]
 Range("C5:C9,C12:C16,C19:C23,C26:C30,C33:C37,C40:C44,C47:C51,C54:C58,C61:C65,C68:C72,C75:C79,C82:C86").ClearContents
 Range("E5:H9,E12:H16,E19:H23,E26:H30,E33:H37,E40:H44,E47:H51,E54:H58,E61:H65,E68:H72,E75:H79,E82:H86").ClearContents
 Range("K5:L9,K12:L16,K19:L23,K26:L30,K33:L37,K40:L44,K47:L51,K54:L58,K61:L65,K68:L72,K75:L79,K82:L86").ClearContents
 Range("R4,R11,R18,R25,R32,R39,R46,R60,R67,R74,R81").ClearContents
   
 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
 
End Sub

  • Solução
Postado
8 horas atrás, KaKaBeCuDo disse:

 ... se eu não estiver muito doido, ...

hummm ... se cuide :tw_tounge_wink:
 

 

 

Pintei as linhas para facilitar o seu entendimento. Em macros a ordem dos comandos é fundamental.

 

no post #10 está assim:

ActiveSheet.Copy After:=Sheets(Sheets.Count) ~~~> faz cópia da planilha 2020 (gera a planilha 2021)

ActiveSheet.Unprotect ~~~> desprotege a planilha 2021

 

 

no post #15 você colocou assim:

 ActiveSheet.Unprotect ~~~> desprotege a planilha 2020
 ActiveSheet.Copy After:=Sheets(Sheets.Count) ~~~> faz cópia da planilha 2020 (gera a planilha 2021)

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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