Grüezi Rob
sehe ich das richtig, daß der Zugriff auf Zellwerte
geschlossener Workbooks (Mapen) mit einer normalen
Excel-Formel möglich ist, nicht aber mit VBA?
Eine direkte Bezugs-Formel kannst Du immer in eine Zelle schreiben (lassen) und dort dann den Wert aus der externen Datei haben.
Dasselbe mit VBA läuft auf einen Code hinaus, der die Bezugs-Formel in die Zelle schreibt und anschliessend durch den importierten Wert ersetzt.
Ich habe das mal in eine VBA-Funktion zusammengefasst, die dann automatisiert und auch über Schleifen aufgerufen werden kann und die Werte so aus nicht geöffneten Mappen importiert:
Public Function GetDataClosedWB(SourcePath As String, \_
SourceFile As String, \_
SourceSheet As String, \_
SourceRange As String, \_
TargetRange As Range, \_
Optional blFormula As Boolean) As Boolean
'Holt einen Bereich aus einer \_geschlossenen\_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© [email protected]
Dim strQuelle As String
Dim Zeilen As Long
Dim Spalten As Byte
On Error GoTo InvalidInput
If Right(SourcePath, 1) "\" Then SourcePath = SourcePath & "\"
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 & ")"
If Not blFormula Then .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
Dann hier ein Beispiel wie der Code aufgerufen werden kann/soll:
Public Sub HoleDaten()
Dim Pfad As String
Dim Dateiname As String
Dim Blatt As String
Dim Bereich As String
Pfad = "C:\Users\Test\Documents\Stick\"
Dateiname = "MeineMappe.xlsm"
Blatt = "Test1"
Bereich = "A9:smiley:9"
GetDataClosedWB Pfad, \_
Dateiname, \_
Blatt, \_
Bereich, \_
Range("D1"), \_
True
End Sub
Mit freundlichen Grüssen
Thomas Ramel