29.10.2018, 09:24
Guten Morgen zusammen,
habe jetzt folgenden Code (mit leichten Anpassungen der Zellbereiche und Verzeichnisnamen) für mein Vorhaben, wie ich ihn in der angehängten Beispieldatei verwende. - Danke an Stefan bis hierhin!
Problem nach wie vor:
Daten werden nur aus einer meiner aktuell vier Quelldateien eingelesen und leider dann aber auch unter alle meine vier Lieferanten-Spalten eingefügt.
Im im Code angegebenen Verzeichnisordner "PBDs" sind also meine vier Quelldateien gespeichert, deren Werte in meiner neuen Datei verglichen werden sollen, nach folgender Logik:
Lieferant 1: G8 soll in D3, G9 in E2, G10 in C1, die Werte aus E19:E74 sollen in D5:D60.
Lieferant 2: G8 soll in H3, G9 in I2, G10 in G1, die Werte aus E19:E74 sollen in D5:D60.
... und so weiter, d.h. immer um 4 Spalten versetzt.
Erklärung dazu: In der Beispieldatei sind die Platzhalter für die Namen der Lieferanten zu sehen ("Lieferant 1", "Lieferant 2", ...). Hier soll natürlich dann der tatsächliche Name stehen (in jeweiliger Quelldatei in "G10"). Gleiches gilt für die Lieferantennummer (Quelldatei "G9") und die Währung (Quelldatei "G8").
Insb. @Stefan: Sorry, wenn meine Zellwerte oder Spalten jetzt (mal wieder) abgewichen sind vom Ausgangspost, habe das aber bereits im Code berücksichtigt bzw. korrigiert.
Hoffe, das war jetzt nicht zu verwirrend und einigermaßen verständlich. Vielleicht kann ja nochmal jemand helfen...
Danke und Grüße
Philipp
habe jetzt folgenden Code (mit leichten Anpassungen der Zellbereiche und Verzeichnisnamen) für mein Vorhaben, wie ich ihn in der angehängten Beispieldatei verwende. - Danke an Stefan bis hierhin!
Code:
Sub prcX()
Dim strDatei As String
Dim lngSpalte As Long
'On Error Resume Next
'Eintrag in Spalte E
lngSpalte = 4
'im Unterverzeichnis Dateien bitte anpassen
strDatei = Dir(ThisWorkbook.Path & "\PBDs\*.xls*")
Do While strDatei <> ""
If GetDataClosedWB(ThisWorkbook.Path & "\PBDs\", _
strDatei, "Tabelle1", "E19:E74", _
ThisWorkbook.Worksheets(1).Cells(5, lngSpalte)) Then
lngSpalte = lngSpalte + 4
End If
strDatei = Dir()
Loop
End Sub
Public Function GetDataClosedWB(SourcePath As String, _
SourceFile As String, _
sourceSheet As String, _
SourceRange As String, _
TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org
Dim strQuelle As String
Dim Zeilen As Long
Dim Spalten As Long 'Byte habe ich in Long geändert
On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & _
sourceSheet & "'!" & _
Range(SourceRange).Cells(1, 1).Address(0, 0)
Zeilen = Range(SourceRange).Rows.Count
Spalten = Range(SourceRange).Columns.Count
With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
.Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
.Value = .Value
End With
GetDataClosedWB = True
Exit Function
InvalidInput:
MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", _
vbExclamation, "Get data from closed Workbook"
GetDataClosedWB = False
End Function
Problem nach wie vor:
Daten werden nur aus einer meiner aktuell vier Quelldateien eingelesen und leider dann aber auch unter alle meine vier Lieferanten-Spalten eingefügt.
Im im Code angegebenen Verzeichnisordner "PBDs" sind also meine vier Quelldateien gespeichert, deren Werte in meiner neuen Datei verglichen werden sollen, nach folgender Logik:
Lieferant 1: G8 soll in D3, G9 in E2, G10 in C1, die Werte aus E19:E74 sollen in D5:D60.
Lieferant 2: G8 soll in H3, G9 in I2, G10 in G1, die Werte aus E19:E74 sollen in D5:D60.
... und so weiter, d.h. immer um 4 Spalten versetzt.
Erklärung dazu: In der Beispieldatei sind die Platzhalter für die Namen der Lieferanten zu sehen ("Lieferant 1", "Lieferant 2", ...). Hier soll natürlich dann der tatsächliche Name stehen (in jeweiliger Quelldatei in "G10"). Gleiches gilt für die Lieferantennummer (Quelldatei "G9") und die Währung (Quelldatei "G8").
Insb. @Stefan: Sorry, wenn meine Zellwerte oder Spalten jetzt (mal wieder) abgewichen sind vom Ausgangspost, habe das aber bereits im Code berücksichtigt bzw. korrigiert.
Hoffe, das war jetzt nicht zu verwirrend und einigermaßen verständlich. Vielleicht kann ja nochmal jemand helfen...
Danke und Grüße
Philipp