Ir ao conteúdo
  • Cadastre-se

Macro Excel - Cópia de dados de vários arquivos


largurajr

Posts recomendados

Senhores, boa tarde. Acabei de me cadastrar, por isso peço desculpas se eu cometer algum erro.:(

Bem, sei muito pouco sobre VBA, porém estou com um problema que só poderá ser resolvido com uma macro!

Tenho 455 arquivos do Excel que necessito copiar algumas células e criar um arquivo único com esses dados.

Preciso criar um looping, mas não sei!

O que tentei até agora (sem o loop) foi o seguinte:

1 - Abrir o arquivo de onde copiarei os dados:

Workbooks.Open ("F:\TMEC\P_48\Boletim.090101_manhã.xls")

Worksheets("Plan1").Activate

End Sub

O número 0900101, significa de trás para frente o dia, o mês e o ano. Isto é, preciso variar de 30 em 30 dias até 12 meses, assim:

090101

090102

090103

....

090130

090201

090202

.....

090230

090301

............

091230

A seguir a cópia dos dados e posterior "colagem" em outra planilha:

Windows("Boletim.090101_manhã.xls").Activate

Range("B6:C6").Select

Selection.Copy

Windows("Pasta4").Activate

Range("B2").Select

ActiveSheet.Paste

Windows("Boletim.090101_manhã.xls").Activate

ActiveWindow.SmallScroll Down:=3

Range("B15:C15").Select

Application.CutCopyMode = False

Selection.Copy

Windows("Pasta4").Activate

Range("B3").Select

ActiveSheet.Paste

Windows("Boletim.090101_manhã.xls").Activate

Range("B13:C13").Select

Application.CutCopyMode = False

Selection.Copy

Windows("Pasta4").Activate

Range("B4").Select

ActiveSheet.Paste

Windows("Boletim.090101_manhã.xls").Activate

ActiveWindow.SmallScroll Down:=9

Range("B36:C36").Select

Application.CutCopyMode = False

Selection.Copy

Windows("Pasta4").Activate

Range("B5").Select

ActiveSheet.Paste

Os intervalos de cópia estão em verde, preciso colá-los numa nova planilha.

Será que vocês poderiam me ajudar? Estou precisando muito.

Desde já agradeço a atenção.:)

Link para o comentário
Compartilhar em outros sites

largurajr,

segue uma base para a macro que você precisa. Precisará evoluíla para que atenda às suas necessidades.

Qualquer coisa estamos aí.

Abraço

Sub Macro1()
'
' Macro1 Macro
'

'
Dim DocDate 'data do documento
Dim FileName 'variavel para manter a data do documento
Dim DestinyCell 'variavel para apontar a celula de destino

DocDate = #1/1/2009# 'Data inicial

For xNum = 1 To 365 'loop para percorrer todos os dias do ano (sem considerar o bissexto)
FileName = "input" & Format(DocDate, "yymmdd") & ".xlsx" 'monta o nome do arquivo
Workbooks.Open "c:\temp\" & FileName 'abre o arquivo a partir do diretorio temp
Range("A1:C1").Select 'seleciona o range de origem
Selection.Copy 'copia a seleção para a memoria
Windows("final.xlsm").Activate 'seleciona a planilha de destino (a própria planilha onde está a macro)
DestinyCell = "A" & xNum 'calcula a celula de destino
Range(DestinyCell).Select 'seleciona a celula de destino
ActiveSheet.Paste 'cola o conteudo
Windows(FileName).Activate 'ativa a planilha de origem
ActiveWindow.Close 'fecha a planilha de origem
DocDate = DocDate + 1 'avança para o próximo dia
Next

End Sub

PS: Utilizei Office 2007.

Link para o comentário
Compartilhar em outros sites

A partir da sua macro, fiz um exemplo simplificado que ficou assim:

Sub Macro1()

'

' Macro1 Macro

' Macro gravada em 4/9/2009 por Project

'

'

Dim DocDate 'data do documento

Dim FileName 'variavel para manter a data do documento

Dim DestinyCell 'variavel para apontar a celula de destino

For xNum = 1 To 2 'loop para percorrer todos os dias do ano (sem considerar o bissexto)

Workbooks.Open "C:\Documents and Settings\Project\Meus documentos\MACRO\Manha_teste" & xNum 'abre o arquivo a partir do diretorio temp

Range("A1:B1").Select 'seleciona o range de origem

Selection.Copy 'copia a seleção para a memoria

Windows("Pasta1.xls").Activate 'seleciona a planilha de destino (a própria planilha onde está a macro)

DestinyCell = "A" & xNum 'calcula a celula de destino

Range(DestinyCell).Select 'seleciona a celula de destino

ActiveSheet.Paste 'cola o conteudo

Next xNum

'ActiveWindow.Close 'fecha a planilha de origem

End Sub

Agora tentarei para a minha necessidade!!

Muito obrigado mesmo!!!

Mas acho que ainda terei dúvidas, pois estou iniciando!!

Abraço

Link para o comentário
Compartilhar em outros sites

Não sei se já conseguiu entender o motivo da data inicial.

DocDate = #1/1/2009# 'Data inicial

ela é a variável que vai te ajudar a automatizar a geração dos nomes dos seus arquivos.

A partir do exemplo "Boletim.090101_manhã.xls" o seu código pode ser alterado para:

FileName = "Boletim." & Format(DocDate, "yymmdd") & "_manhã.xls"  'monta o nome do arquivo
Workbooks.Open "C:\Documents and Settings\Project\Meus documentos\MACRO\Manha_teste" & FileName 'abre o arquivo a partir do diretorio Manha_teste

Link para o comentário
Compartilhar em outros sites

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