locked
Como compilar varios ficheiros num so RRS feed

  • Pergunta

  • Ola a todos

    Tenho 5 ficheiros  com um shet cada, todos os meses necessito de colar esses shets num so ficheiro, num uni co shet.

    Os ficheiros tem sempre o mesmo nome, produção L, produção P, produção A, Produção C, produção V, que deverão dar origem a um ficheiro Produção Global, todos os ficheiros estão guardados numa mesma pasta.(os varios ficheiros de produção tem nª de linhas diferentes, quanto as colunas te todos 20 colunas com o mesmo tipo de informação)

    No Ficheiro "produção global", necessito de eliminar as linhas que na coluna L tenham valor inferior a 5140.

    Necessito de noutro shet do ficheiro de "produção global" fazer uma tabela dinamica que deve incluir a coluna L e os totais da Z

     

    Agradeço a  vossa ajuda

    segunda-feira, 28 de fevereiro de 2011 23:12

Respostas

  • Você está procedendo corretamente.

    Certifique-se que nenhuma Pasta de Trabalho já esteja aberta (além da Livro1.xlsm) antes de executar esta macro.

     

    Qual é a mensagem de erro que você está obtendo? O VBE mostra uma mensagem com a descrição do erro.

     

    E faça o favor: inicialmente execute a rotina e, na instrução que dá o erro, isto é na linha:

    Set wb = Workbooks.Open(.Cells(r, "A")) 

    sublinhe o trecho em que pus em negrito .Cells(r, "A") e pressione Shift+F9. Verifique qual é o valor dessa expressão e poste aqui.

     


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    • Marcado como Resposta JR.M quinta-feira, 3 de março de 2011 21:50
    quarta-feira, 2 de março de 2011 21:54

Todas as Respostas

  • segunda-feira, 28 de fevereiro de 2011 23:31
  • Obrigado vou tentar adaptar este codigo abaixo:

    Dim sourceSheet As Worksheet 
    Dim destSheet As Worksheet 
     
    '' copy from the source 
    Workbooks
    .Open Filename:="c:\source.xls" 
    Set sourceSheet = Worksheets("source") 
    sourceSheet
    .Activate 
    sourceSheet
    .Cells.Select 
    Selection
    .Copy 
     
    '' paste to the destination 
    Workbooks
    .Open Filename:="c:\destination.xls" 
    Set destSheet = Worksheets("dest") 
    destSheet
    .Activate 
    destSheet
    .Cells.Select 
    destSheet
    .Paste 
     
    '' save & close 
    ActiveWorkbook
    .Save 
    ActiveWorkbook
    .Close 

    parece-me que usando este codigo 5 vezes para o meu caso substituindo os varios ficheiros de origem e usando sempre omesmo no destino resolverá a questão certo?

     

    obrigado

    terça-feira, 1 de março de 2011 00:01
  • Crie uma Pasta de Trabalho em branco, e uma guia (Planilha) nela que se chama Lista

    Em seguida, digite, por exemplo, nas células

    A1 = c:\temp\wb1.xlsx

    A2 = c:\temp\pasta.xlsx

    A3 = c:\temp\contatos.xlsx

    A rotina abaixo gera uma nova guia (Planilha) com a primeira Planilha de cada Pasta de Trabalho que estiver na lista da coluna A da Planilha Lista

    Sub ConcatenarPlanilhas()
      
      Dim wb As Workbook
      Dim ws As Worksheet
      Dim wsTodos As Worksheet
      Dim r As Long, rLast As Long
      
      With Sheets("Lista")
        rLast = .Cells(.Rows.Count, "A").End(xlUp).Row
      
        'Cria uma nova Pasta de Trabalho, que conterá a Planilha
        'com todas as Planilhas concatenadas.
        Set wsTodos = ThisWorkbook.Sheets.Add
      
        For r = 1 To rLast
          Set wb = Workbooks.Open(.Cells(r, "A"))
          rngUsado(wb.Sheets(1)).Copy Destination:=wsTodos.Range("A" & _
           rngUsado(wsTodos).Rows.Count + 1)
          wb.Close False
        Next r
      
      End With
      'É necessário apagar a primeira linha da Planilha
      'de Resumo porque ela começa a copiar as Planilhas
      'na linha 2, e não na 1:
      wsTodos.Rows(1).Delete
      
    End Sub
    
    'Função para determinar o UsedRange real de uma Planilha:
    Function rngUsado(ws As Worksheet) As Range
      With ws
        Set rngUsado = .Range("A1:" & _
         .UsedRange(.UsedRange.Cells.Count).Address)
      End With
    End Function


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    terça-feira, 1 de março de 2011 03:29
  • Boa Noite

    Obrigado desde ja ela ajuda,

    Mas estive a fazer um teste antes de implementar no ficheiros que pretendo, e tive alguns problemas, e como percebo pouco de VB, e complicado, por isso peço mais uma vez ajuda,.

    então criei uma pasta c:\teste com uma planilha de excel chamada Lista.xlsx, nessa mesma pasta tenho 3 novas planilhas uma com nome teste.xlsx outra teste1.xlsx e outra teste2.xlsx, nomes inseridos na coluna A da planilha lista.xlsx.

    duvidas em qual ficheiro (planilha) devo criar a macro?

    Eu criei no ficheiro lista, mas quando executei deu erro, ou devo criar no livro de macros.

    deu erro na Linha  -  Set wb = Workbooks.Open(.Cells(r, "A"))

    terça-feira, 1 de março de 2011 21:53
  • Você deve colocar o código numa Pasta de Trabalho que não seja nenhuma delas que estejam listadas na Planilha que possui a guia chamada Lista.

    Experimente, por exemplo, fechar todas as Pastas de Trabalho, em seguida criar uma Pasta de Trabalho chamada Lista.xlsm, cole esse código nela, e renomeie uma de suas Planilhas com o nome de Lista. Em seguida, execute o código que tudo deverá funcionar bem.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    quarta-feira, 2 de março de 2011 13:26
  • ola

    Quanto mais tento fazer, parece-me que não percebo nada disto, mas como não sou desistir facilmente, ca estou eu a dar trabalho: criei o livro de excel com o nome livro1.xlsm que contem  a macro com o codigo acima, renomeei uma das planilhas para lista e nela coloquei na primeira coluna  a localização dos livros de excel a copiar "d:\teste.xlsx; d:\teste1.xlsx, de seguida executei a macro que criou uma nova planilha no livro1 .xlsm, mas parou na instrução:

    Set wb = Workbooks.Open(.Cells(r, "A"))

     e não fez mais nada, o que é que estou a fazer de errado?

    todos os livros estão no disco d:

    quarta-feira, 2 de março de 2011 21:16
  • Você está procedendo corretamente.

    Certifique-se que nenhuma Pasta de Trabalho já esteja aberta (além da Livro1.xlsm) antes de executar esta macro.

     

    Qual é a mensagem de erro que você está obtendo? O VBE mostra uma mensagem com a descrição do erro.

     

    E faça o favor: inicialmente execute a rotina e, na instrução que dá o erro, isto é na linha:

    Set wb = Workbooks.Open(.Cells(r, "A")) 

    sublinhe o trecho em que pus em negrito .Cells(r, "A") e pressione Shift+F9. Verifique qual é o valor dessa expressão e poste aqui.

     


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    • Marcado como Resposta JR.M quinta-feira, 3 de março de 2011 21:50
    quarta-feira, 2 de março de 2011 21:54
  • ja descobri qual era o problema, eu tambem não tinha prestado a devida atenção ao erro, porque estava tudo lá.

    era o nome dos ficheiros que eu escrevia na planilha que não estavam correctos, pois eram ficheiros do excel 2007 e eu estava a colocar com a extenão xls em vez de xlsx.

    Obrigado pela ajuda resulta na perfeição a macro funciona a 100%, apenas ha uma coisa que poderia ser ajustada para o meu caso, não sei se é possivel, pois ele copia sempre desde a primeira linha e a primeira linha contem os cabeçalhos, e isso faz com que cole os 5 cabeçalhos repetidos, mas basta fazer um filtro e eliminar as linhas, e ao mesmo tempo garvar uma macro que pode ser executada depois desta correcto, ou colar o codigo a seguir a este? se colar o codigo a seguir será que fica bem?

    de qualquer manera obrigado.

    quinta-feira, 3 de março de 2011 21:49
  • Não testei ainda, mas experimente trocar

       rngUsado(wb.Sheets(1)).Copy Destination:=wsTodos.Range("A" & _
        rngUsado(wsTodos).Rows.Count + 1)

    por

       rngUsado(wb.Sheets(1)).Offset(1).Copy Destination:=wsTodos.Range("A" & _
        rngUsado(wsTodos).Rows.Count + 1)


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    domingo, 13 de março de 2011 12:36