2016-07-19 11 views
0

Ich habe versucht, Daten aus anderen Arbeitsmappen in ein Master-Arbeitsmappe zu extrahieren. Alle diese Arbeitsmappen wurden in einem Ordner gespeichert. Und ich wollte andere Arbeitsmappen automatisch nicht manuell öffnen. Die Daten, die ich extrahieren muss, sind nicht benachbarte Zellen und ich möchte, dass die aus jeder Quellarbeitsmappe extrahierten Daten in Zeilen in der Hauptarbeitsmappe angezeigt werden (weil ich eine Kopfzeile in Zeile 1 habe, also nach dem Extrahieren von Daten aus der ersten Arbeitsmappe und Einfügen in Zeile 2, die Daten aus der zweiten Arbeitsmappe extrahiert werden in Zeile 3 und so weiter)Bei der Verwendung von Transponieren festgefahren

Wie auch immer, wenn ich das Makro lief, blieb ich in Transpose stecken.

Unten ist mein Code

Sub LoopThroughDirectory() 
    Dim MyFile As String 
    Dim wkbSource As Workbook 
    Dim wkbTarget As Workbook 
    Dim erow As Single 
    Dim Filepath As String 
    Dim copyRange As Range 
    Dim cel As Range 
    Dim pasteRange As Range 

    Filepath = "C:\xxxxx\" 
    MyFile = Dir(Filepath) 

    Do While Len(MyFile) > 0 
     If MyFile = "Import Info.xlsm" Then GoTo NextFile  
     Set wkbTarget = Workbooks("Import Info.xlsm") 

     Set wkbSource = Workbooks.Open(Filepath & MyFile) 
     Set copyRange = wkbSource.Sheets("sheet1").Range("c3,f6,f9,f12,f15,f19,f21,f27,f30,f33,f37,f41") 
     Set pasteRange = wkbTarget.Sheets("sheet1").Range("a1") 

     For Each cel In copyRange 
      cel.Copy 
      ecolumn = wkbTarget.Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1).Column 
      wkbTarget.Worksheets("Sheet1").Paste Destination:=wkbTarget.Worksheets("Sheet1").Range(Cells(1, ecolumn).Address) 
      pasteRange.Cells(1, ecolumn).PasteSpecial xlPasteValues 

     Next 
     Application.CutCopyMode = False 

     wkbSource.Close 

    NextFile: 
     MyFile = Dir 

    Loop 

End Sub 

Was ich bisher getan haben:

  1. ich die Daten transponiert ich von der Quelle Arbeitsmappe extrahiert, aber sie waren in der Master-Arbeitsmappe nicht gezeigt wie das, was ich erwartet hatte . Alle von ihnen sind in Zeile 1
  2. Ich habe nicht viel Erfahrung in VBA und ich fühle mich wie der Code, den ich schrieb, um nicht benachbarte Zellen kopieren und transponieren in der Master-Arbeitsmappe macht die Schleife viel komplizierter. Aber ich weiß nicht, wo ich falsch gelaufen bin oder wie ich das beheben kann.

Bitte helfen Sie mir. Ich danke dir sehr!

+0

Sie nie das 'row' Argument in Ihrem pasterange erhöhen. Wenn Sie möchten, dass die Informationen aus jedem Arbeitsblatt in einer eigenen Zeile stehen, sollten Sie das Argument 'row' jedes Mal erhöhen, wenn Sie eine neue Datei einlesen. –

Antwort

0

Sie haben außerhalb der Schleife den Zielbereich zu setzen und es im Inneren der Schleifen-Offset:

Sub LoopThroughDirectory() 
    Dim Filepath As String, MyFile As String 
    Dim wkbSource As Workbook, wkbTarget As Workbook 
    Dim copyRange As Range, cel As Range, pasteRange As Range 

    Set wkbTarget = Workbooks("Import Info.xlsm") 
    Set pasteRange = wkbTarget.Sheets("sheet1").Range("a2") ' start at row 2 

    Filepath = "C:\xxxxx\" 
    MyFile = Dir(Filepath) 

    While MyFile > "" 
     If MyFile = "Import Info.xlsm" Then GoTo NextFile  

     Set wkbSource = Workbooks.Open(Filepath & MyFile) 
     Set copyRange = wkbSource.Sheets("sheet1").Range("c3,f6,f9,f12,f15,f19,f21,f27,f30,f33,f37,f41") 

     For Each cel In copyRange 

      pasteRange.Value = cel.Value ' "copy" the value 

      Set pasteRange = pasteRange.Offset(, 1) ' move to the next column 

     Next 

     wkbSource.Close 

     Set pasteRange = pasteRange.EntireRow.Resize(1,1) ' move back to the first cell in the row 

     Set pasteRange = pasteRange.Offset(1) ' move to the cell bellow (next row) 

    NextFile: 
     MyFile = Dir 

    Wend  
End Sub 
+0

Vielen Dank! Ich möchte diese Funktion in jeder Quelldatei arbeiten lassen. Und ich habe die "Set wkbTarget = Arbeitsmappen (" Import Info.xlsm ")" auf "Set wkbTarget = ActiveWorkBook" geändert, aber ich kann nicht ändern, wenn MyFile = "" zu MyFile = ActiveWorkBook, ich herausgefunden, warum und versuchte zu verwenden " ThisWorkBook.Fullname "aber es hat nicht funktioniert. Macht es Ihnen etwas aus, mir ein paar Meinungen zu geben? Ich schätze das wirklich! – hzxerh

+0

Ich habe es herausgefunden! Danke trotzdem – hzxerh

+0

'wkbTarget.Name' hat manchmal nicht die Erweiterung also' wenn Filepath & MyFile = wkbTarget.Fullname Then GoTo NextFile' – Slai

Verwandte Themen