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.F.O. eu não entendi o input:

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

O nome do arquivo é: "Boletim.090101_manhã.xls", sendo que o nº interno irá variar para cada dia do mês. Como faço para pegar os dados de cada arquivo?

Não entendi a utilização desta data.

Abraço

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

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

Curso de Hacker Ético

LANÇAMENTO!

CLIQUE AQUI E CONFIRA!

* Este curso não é ministrado pela equipe do Clube do Hardware.