Ir ao conteúdo

Excel Copiar Varias Abas do mesmo arquivo excel para outro (Usando Loop)


Ir à solução Resolvido por OreiaG,

Posts recomendados

Postado

Pessoal,

 

Hoje tenho uma planilha com varias abas (esse numero varia), e gostaria de saber como usar um loop para ele ir copiando cada aba e colando em outra planilha.

 

Sei fazer copiando uma a uma, mas como em alguns casos tem cerca de 20/30 abas, o código fica muito grande e repetitivo, sei que posso usar loop para ele fazer isso, mas não tenho muito conhecimento com loop (na verdade nenhum rsrs).

 

Um exemplo do do que preciso:

Excel 1 (base) - com 15 abas com a mesma formatação

Excel 2 - uma aba consolidada com as 15 abas do Excel 1.

 

Copiar Plan1 do Excel 1 e copiar na aba Plan 1 do Excel 2

Copiar Plan2 do Excel 1 e copiar na aba Plan 1 do Excel 2....

Seguir até a ultima Plan do Excel 1...

 

Obrigado.

Postado

@luizdeath Uma das formas de fazer um loop nas planilhas é com For Each, p.ex,

 

Dim Planilha As Worksheet
    
For Each Planilha In ThisWorkbook.Worksheets
    
Next Planilha

 

Aí é só colocar a sua macro para copiar as planilhas.

Postado

Muito obrigado pela resposta, mas ainda fiquei com uma duvida.

 

Realmente ele está fazendo um Loop, porém está sempre copiando da mesma planilha, como faço para ele pular para a próxima planilha
Ele está sempre copiando da Plan1, eu precisaria que depois de copiar da Plan1 ele copiasse da Plan2 e assim por diante.

Postado

@luizdeath No trecho que mostrei as planilhas que serão copiadas são referentes a variável Planilha. Outro exemplo,

 

For Each Planilha In ThisWorkbook.Worksheets
    MsgBox Planilha.Name
    Stop
Next Planilha

 

Quando rodar o loop vai mostrar o nome de cada planilha (se quiser continuar o loop digite F5 quando parar no Stop), então no seu código substitua a parte que faz a cópia por essa variável. Você pode também colocar uma condição para pular qualquer planilha como a que vai receber os dados.

Postado

😬
Desculpe, mas não consegui entender ainda, não tenho muito noção do Loop e nem da variavel Dim.

 

Abaixo está o codigo que estou usando para fazer a copia:

 

Uma solução que encontrei, foi copiar esse codigo varias vezes até chegar na ultima planilha, mas estava querendo aprender a usar o Loop

 

Sub Copiar_Abas()

    Windows("DescricaoRoteiros.xlsx").Activate
    Sheets("Folha2").Select
    Range("A21").Select
    ActiveCell.FormulaR1C1 = "=R19C2"
    Range("A21").Value = Range("A21").Value
    Range("A21").Select
    Selection.Copy
    Range("B21:H21").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, -1).Select
    Range(Selection, Selection.End(xlUp)).Select
    Range("A21:U5000").Select
    Selection.Copy
    Windows("Atendimento Roteiro.xlsx").Activate
    Sheets("Base").Select
    Range("A1048576").Select
    Selection.End(xlUp).Select
    ActiveCell.Offset(1, 0).Select
    ActiveSheet.Paste
    
End Sub

 

Postado

@luizdeath O loop pode ser usado para selecionar as planilhas, mas para copiar os ranges é preciso ter um critério para colocar no código as células devem ser copiadas. São sempre as mesmas de cada planilha? São as últimas de alguma coluna específica?

 

Nesse código que postou está selecionando pastas diferentes e copiando células da coluna A. Se possível anexe um modelo para deixar mais claro ou explique o que quer fazer. A cópia é em outra pasta? Qual o critério? E devem ser coladas onde e de que forma?

  • Solução
Postado

Veja se ajuda. O código abaixo deve ser colocado em um módulo do arquivo Atendimento Roteiro.

 

Sub DadosConsolidados()
 Dim wsO As Worksheet, wsD As Worksheet, UL As Long
  Set wsD = ThisWorkbook.Sheets("Base")
  For Each wsO In Workbooks("DescricaoRoteiros.xlsx").Worksheets
   wsO.Range("A21").FormulaR1C1 = "=R19C2"
   wsO.Range("A21").Value = wsO.Range("A21").Value
   UL = wsO.Cells(Rows.Count, 1).End(3).Row
   wsO.Range("A21:U" & UL).Copy wsD.Cells(Rows.Count, 1).End(3)(2)
  Next wsO
End Sub

 

Postado
20 horas atrás, OreiaG disse:

Veja se ajuda. O código abaixo deve ser colocado em um módulo do arquivo Atendimento Roteiro.

 

Sub DadosConsolidados()
 Dim wsO As Worksheet, wsD As Worksheet, UL As Long
  Set wsD = ThisWorkbook.Sheets("Base")
  For Each wsO In Workbooks("DescricaoRoteiros.xlsx").Worksheets
   wsO.Range("A21").FormulaR1C1 = "=R19C2"
   wsO.Range("A21").Value = wsO.Range("A21").Value
   UL = wsO.Cells(Rows.Count, 1).End(3).Row
   wsO.Range("A21:U" & UL).Copy wsD.Cells(Rows.Count, 1).End(3)(2)
  Next wsO
End Sub

 

Deu certo, muito obrigado pela ajuda pessoal. aos poucos vou aprendendo mais.

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