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
Also, funktioniert Ihr Code nicht oder etwas Unerwartetes? – SJR
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
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