Logo Hardware.com.br
Leiom
Leiom Novo Membro Registrado
3 Mensagens 0 Curtidas

[Resolvido] Macro copiar tabelas em abas diferentes

#1 Por Leiom 28/08/2017 - 10:12
Opa pessoal, estou pesquisando sobre esta macro em vários locais e até agora ainda não consegui colocar ela para funcionar (basicamente não achei exatamente o que quero), por isso estou criando este tópico.

Tenho dois arquivos com várias abas iguais dentro deles (uma aba para cada dia do mês) e existe uma tabela em cada aba dessa que quero copiá-las em sequencia em um novo arquivo.
O detalhe importante que ainda não consegui implementar foi copiar as tabelas a partir da primeira linha vazia da tabela copiada anteriormente, pois as tabelas nem sempre estão 100% preenchidas (ou fazer a macro ler e copiar somente as linhas com valores, mas achei que esse modo seria mais complicado). A macro teria que ser do modo:

- Abrir 'Arquivo1'
- Ler e copiar 'Tabela1.1' em Plan1
- Colar 'Tabela1.1' em 'ArquivoTabelas'
- Mudar de aba e ler e copiar 'Tabela1.2' em Plan2
- Colar 'Tabela1.2' em 'ArquivoTabelas' / começando a partir da primeira linha vazia da Tabela1.1
- Fechar 'Arquivo1'

- Abrir 'Arquivo2'
- Ler e copiar 'Tabela2.1' em Plan1
- Colar 'Tabela2.1' em 'ArquivoTabelas' / começando a partir da primeira linha vazia da Tabela1.2
- Mudar de aba e ler e copiar 'Tabela2.2' em Plan2
- Colar 'Tabela2.2' em 'ArquivoTabelas' / começando a partir da primeira linha vazia da Tabela2.1
- Fechar 'Arquivo2'

Lembrando que essas tabelas possuem o mesmo tamanho e estão localizadas com início e fim nas mesmas linhas e colunas nas abas.

Tentei explicar bem o que quero e basicamente é isso que eu precisaria, a macro no final seria maior para incrementar com outras abas e arquivos, mas com essa base funcionando já é mais do que o suficiente!

Obrigado!
Leiom
Leiom Novo Membro Registrado
3 Mensagens 0 Curtidas
#2 Por Leiom
29/08/2017 - 08:18
Pessoal, consegui fazer a colagem a partir da primeira linha vazia da colagem anterior como eu queria. A macro está aqui embaixo para quem quiser dar uma olhada, está 100% funcional.

Sub Teste()
Workbooks.Open Filename:="C:\Users\leonardo.pontes\Desktop\Nova pasta\Pasta1.xlsx"
Windows("Pasta1.xlsx&quot.Activate
Sheets("Plan1&quot.Range("A1:C6&quot.Copy
Windows("Macro.xlsm&quot.Activate
Range("A1&quot.Select
ActiveSheet.Paste
Windows("Pasta1.xlsx&quot.Activate
Sheets("Plan2&quot.Range("A1:C3&quot.Copy
Windows("Macro.xlsm&quot.Activate
Range("A1&quot.Select
Do
If ActiveCell <> "" Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until ActiveCell = ""
ActiveCell.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Windows("Pasta1.xlsx&quot.Activate
Sheets("Plan3&quot.Range("A1:C6&quot.Copy
Windows("Macro.xlsm&quot.Activate
Range("A1&quot.Select
Do
If ActiveCell <> "" Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until ActiveCell = ""
ActiveCell.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False

Windows("Pasta1.xlsx&quot.Activate
ActiveWindow.Close
End Sub


O problema que me resta é que preciso ler 30 abas no mesmo arquivo e do modo que fiz até agora minha macro ficaria muito extensa. Existe algum modo de otimizar a mudança de abas nessa macro (talvez fazer um loop para mudança de abas e dentro dele esse loop que já usei para colar a partir da primeira linha vazia)? Estou chamando o arquivo base e mudando a aba e o arquivo destino "manualmente" por enquanto.
Leiom
Leiom Novo Membro Registrado
3 Mensagens 0 Curtidas
#4 Por Leiom
29/08/2017 - 11:32
Basole disse:
Faça uma varredura nas abas existentes, no inicio do seu codigo, algo assim:
[code=vb]
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
'..... seu codigo aqui......
Next ' <= no final do seu codigo
[/code]

Obrigado Basole!
Entendi o código, mas qual a modificação que devo fazer para a chamada das abas para a função copiar? No momento estou copiando somente os dados da primeira planilha e colando ela 3 vezes.

Mas estou bem perto do que preciso, vai dar certo!

Pessoal, passei o dia inteiro hoje tentando mil modificações e modos diferentes, e consegui montar uma macro perfeita pro que eu estava querendo, segue o código para quem interessar.

Sub Teste()

Workbooks.Open Filename:="P:\3. Check list_QHH\Nova pasta\Pasta1.xlsx"

For i = 1 To 30
dias = CStr(i)
Worksheets(dias).Select
Range("A88:K120&quot.Copy
Windows("Macro.xlsm&quot.Activate
Range("A1&quot.Select

Do
If ActiveCell <> "" Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until ActiveCell = ""
ActiveCell.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Windows("Pasta1.xlsx&quot.Activate

Next i

Windows("Pasta1.xlsx&quot.Activate
ActiveWindow.Close

End Sub


Obrigado a todos que ajudaram. Podem fechar o tópico moderadores.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal