2017-03-20 3 views
1

Derzeit habe ich eine Arbeitsmappe, die Arbeitsmappen in demselben Ordner durchläuft, und Daten aus bestimmten Zellen in die Master-Arbeitsmappe kopiert. Wenn ich in Zellen wechseln möchte, aus denen der Code Zellen kopiert, muss ich diesen Wert im Code ändern.VBA: Kopieren von Daten aus einer anderen Arbeitsmappe basierend auf dem Zellwert der aktuellen Arbeitsmappe

Ich habe jedoch Kollegen, die dieses Blatt auch verwenden müssen, um Daten aus anderen Arbeitsmappen zu sammeln. - Also muss ich diesen Gebrauch freundlich machen. Ich möchte, dass der Code einen Zellenwert im Masterworkbook liest und diesen Zellenwert als Zelle verwendet, von der er kopiert wird.

Beispiel:

Wenn ich „B3“ in der masterworkbook Zelle A1 eingeben und das Makro ausführen, wird das Makro-Daten aus dem originsheet B3 kopieren, in die erste Zelle des masterworkbook. Hat jemand irgendwelche Ideen, wie man das erreicht?

Oder so etwas wie:

.Cells(1).Value = originsheet.Range(Range("CellValue from destinationsheet A1").Value).Value 

Hier ist der Code ich benutze:

Sub Consolidate() 

    Dim wkbkorigin As Workbook 
    Dim originsheet As Worksheet 
    Dim destsheet As Worksheet 
    Dim ResultRow As Long 
    Dim Fname As String 
    Dim RngDest As Range 


    Set destsheet = ThisWorkbook.Worksheets("Sheet1") 
    Set RngDest = destsheet.Cells(Rows.Count, 1).End(xlUp) _ 
         .Offset(1, 0).EntireRow 
    Fname = Dir(ThisWorkbook.Path & "/*.xlsx") 

    'loop through each file in folder (excluding this one) 
    Do While Fname <> "" And Fname <> ThisWorkbook.Name 

     If Fname <> ThisWorkbook.Name Then 

      Set wkbkorigin = Workbooks.Open(ThisWorkbook.Path & "/" & Fname) 
      Set originsheet = wkbkorigin.Worksheets(1) 

      With RngDest 
       .Cells(1).Value = originsheet.Range(Range("A1").Value).Value 
       .Cells(2).Value = originsheet.Range(Range("A2").Value).Value 
       .Cells(3).Value = originsheet.Range(Range("A3").Value).Value 
       .Cells(4).Value = originsheet.Range(Range("A4").Value).Value 
       .Cells(5).Value = originsheet.Range(Range("A5").Value).Value 
      End With 

      wkbkorigin.Close SaveChanges:=False 'close current file 
      Set RngDest = RngDest.Offset(1, 0) 

     End If 

     Fname = Dir()  'get next file 
    Loop 
End Sub 

Und ein Bild von dem, was ich meine, falls im unklaren: enter image description here

+0

Also, funktioniert Ihr Code nicht oder etwas Unerwartetes? – SJR

+1

Zu Ihrer Information: Sie müssen das Arbeitsblatt vor * alle Verwendungen * von 'Range' Objekten einfügen. IE: 'RngDest = dessheet.Cells (destsheet.Rows.Count, 1) .End (xlUp)' und '.Cells (1) .Value = originesheet.Range (originesheet.Range (" A1 "). Value) .Wert ' – BruceWayne

+0

Ich kann mich nicht erinnern, ob dies unbedingt notwendig ist, aber Sie könnten' & "/" & 'in' & "\" & 'ändern. Es könnte als '/' arbeiten, da Excel Internetpfade öffnen kann und "" und "" in einem Pfad austauschbar scheinen. Ich bin mir nicht absolut sicher. – Jeeped

Antwort

0

Ich bin Entschuldigung, aber ich glaube, Sie haben sich nicht klar gemacht. Jedoch können Sie versuchen, so etwas wie diese (korrigiert mich wenn ich falsch liege) zu erhalten:

destinationsheet.Range("A1") = originsheet.Range(destinationsheet.Range("A1")) 

Dadurch wird den Wert in Ihrer Master-Arbeitsmappe durch den Inhalt in Zelle-Adresse des anderen Arbeitsblatts ersetzt werden.

+1

Danke, das hat funktioniert. Ich erinnere mich, dass ich das schon einmal versucht habe, aber ich muss mich etwas vertippt haben. Ich habe es nach deinem Kommentar noch mal versucht und es hat prima funktioniert :) – VSC

+0

Bitte gib mir den Daumen hoch für meine Antwort! Ich habe mich gerade in Stack Overflow angemeldet und brauche Reputation! ;) –

+0

habe ich schon, aber da ich eine Punktzahl unter 15 habe, zeigt es nicht :( – VSC

Verwandte Themen