Daten aus geschlossener Arbeitsmappe auslesen

Um Daten per VBA aus einer anderen Arbeitsmappe auszulesen, muss diese im Normalfall zunächst geöffnet werden um anschließend auf die einzelnen Zellinhalte zugreifen zu können.

 

Es geht aber auch anders. Die folgenden VBA-Beispiele zeigen, wie über einen Trick diese Beschränkung umgangen werden kann. Verwendet wird dazu eine Excel4Macro-Funktion, die nach wie vor in allen Excel-Versionen zur Verfügung steht.


Zentraler Bestandteil ist eine Function, welche die Daten aus der geschlossenen Arbeitsmappe ausliest. Dieser Funktion werden dazu einfach der Pfad, der Dateiname, das Tabellenblatt und die Zelle übergeben, die aus der geschlossenen Tabelle ausgelesen werden soll.

 

Listing 1 zeigt die Auslese-Function.

Private Function GetValue(pfad, datei, blatt, zelle)
'** Daten aus geschlossener Arbeitsmappe auslesen

'*** Dimensionierung der Variablen
Dim arg As String

'Sicherstellen, dass das datei vorhanden ist
If Right(pfad, 1) <> "\" Then pfad = pfad & "\"
If Dir(pfad & datei) = "" Then
GetValue = "datei Not Found"
Exit Function
End If

'** Das Argument erstellen
arg = "'" & pfad & "[" & datei & "]" & blatt & "'!" & Range(zelle).Range("A1").Address(, , xlR1C1)

'** Auslesen über Excel4Macro
GetValue = ExecuteExcel4Macro(arg)

End Function

 

Um einen einzelnen Wert aus einer angegebenen Zelle auszulesen, verwenden Sie folgendes Makro.

Sub Zelle_auslesen()
'** Dimensionierung der Variablen
Dim pfad As String, datei As String, blatt As String, zelle As String

'** Angaben zur auszulesenden Zelle
pfad = "F:\Excel\Beispiele"
datei = "geschlossene Mappe2.xls"
blatt = "Tabelle1"
bezug = "A2"

'** Eintragen in Zelle
ActiveCell.Value = GetValue(pfad, datei, blatt, bezug)

End Sub

Im Beispiel wird aus der Datei "geschlossene Mappe2.xls" die Zelle A2 aus dem Tabellenblatt "Tabelle1" ausgelesen und in die aktuell selektierte Zelle eingetragen.

Wenn ganze Bereiche aus der geschlossenen Arbeitsmappe ausgelesen werden sollen, dann verwenden Sie einfach folgenden VBA-Code.

Sub Bereich_auslesen()
'** Dimensionierung der Variablen
Dim pfad As String, datei As String, blatt As String, bereich As Range, zelle As Object

'** Angaben zur auszulesenden Zelle
pfad = "F:\Excel\Beispiele"
datei = "geschlossene Mappe2.xls"
blatt = "Tabelle1"
Set bereich = Range("A1:B10")

'** Bereich auslesen
For Each zelle In bereich
  
  '** Zellen umwandeln
  zelle = zelle.Address(False, False)
  
  '** Eintragen in Bereich
  ActiveSheet.Cells(zelle.Row, zelle.Column).Value = GetValue(pfad, datei, blatt, zelle)
Next zelle

End Sub

In diesem Beispiel wird der Zellbereich A1 bis B10 der geschlossenen Tabelle ausgelesen und in das aktuelle Tabellenblatt im gleichen Zellbereich eingetragen.

Die Beispieldatei mit dem VBA-Code können Sie über den folgenden Link herunterladen.