Tipp 0454 Daten aus einer Arbeitsmappe einlesen (Formeln)
Autor/Einsender:
Datum:
  Angie
22.05.2005
Entwicklungsumgebung:   Excel 2000
Die wohl einfachste Art mit Excel-eigenen Mitteln aus einer geschlossenen Arbeitsmappe Daten in ein Tabellenblatt einzulesen, dürfte die Verwendung einer Formel sein.
Wert einer einzelnen Zelle einlesen
Mit der Formula-Eigenschaft wird zunächst der Zielzelle eine Formel zugewiesen, die Pfad, Dateiname, Tabellenname und die Adresse der auszulesende Zelle beinhaltet, und anschließend in einen "festen" Wert umgewandelt (Value-Eigenschaft), um die Verknüpfung zur geschlossenen Quell-Arbeitsmappe/Tabelle aufzuheben.
 
  With ActiveWorkbook.Worksheets(1).Range("A1")
    .Formula = "='c:\temp\[Mappe1.xls]Tabelle1'!A3"
    .Value = .Value
  End With
 
Werte eines Bereichs einlesen
Um einen Bereich aus einem Tabellenblatt in einer geschlossenen Arbeitsmappe einzulesen, eignet sich die FormulaArray-Eigenschaft, mit der eine Matrixformel zugewiesen werden kann. Auch hier wird den Zellen im Zielbereich zunächst eine Formel zugewiesen und anschließend die Verknüpfung zur geschlossenen Quell-Arbeitsmappe/Tabelle aufgehoben. Um unerwünschte Ergebnisse zu vermeiden, sollte die Dimension (Anzahl Zeilen und Spalten) des Zielbereichs identisch mit der des Quellbereichs sein.
 
  With ActiveWorkbook.Worksheets(1).Range("A2:B2")
    .FormulaArray = "='c:\temp\[Mappe1.xls]Tabelle1'!A3:B3"
    .Value = .Value
  End With
 
Anmerkungen
Lese-/schreibgeschützte Arbeitsmappen
Ist die angegebene Arbeitsmappe mit einem Lese-/Schreibkennwort geschützt, wird beim Zuweisen der Formel ein Excel-interner Dialog für die Eingabe des Passworts angezeigt. Egal ob ein gültiges Passwort eingegeben wird, und egal ob der Dialog mit 'OK' oder 'Abbrechen' geschlossen wird, es tritt m. W. leider kein auffangbarer Laufzeitfehler auf.
Tabellenblattname
Existiert das angegebene Tabellenblatt in der Arbeitsmappen nicht, wird beim Zuweisen der Formel ein Excel-interner Auswahldialog mit einer Liste der in der Arbeitsmappe enthaltenen Tabellenblätter angezeigt. Wird im Auswahldialog ein Tabellenblatt ausgewählt, so wird die Quelle in der Matrixformel entsprechend angepasst, wird der Dialog jedoch mit 'Abbrechen' geschlossen, tritt ein Laufzeitfehler auf.
Anzahl Formeln in einem Tabellenblatt
Die Anzahl der möglichen Formeln in einem Tabellenblatt, die auf ein anderes Tabellenblatt verweisen, ist ab Excel 2000 auf 65472 begrenzt, in Excel 97 auf 32764 (?). Das heißt also, dass der einzulesende Bereich nicht zu groß dimensioniert sein darf.
Anzahl der Zeichen in einer Matrixformel (FormulaArray)
Die Obergrenze der Anzahl der Zeichen in einer Matrixformel (FormulaArray) liegt laut Microsoft bei 255 Zeichen! Probleme könnten beispielsweise dann auftreten, wenn die einzulesenden Arbeitsmappen in einer Ordnerstruktur liegen, die lange Dateipfade ergeben, und/oder auch wenn in der Formel eine IF-Abfrage enthalten ist, und die externe Adresse zwei Mal angegeben werden muss.
 
    .FormulaArray = "=IF('c:\temp\[Mappe1.xls]Tabelle1'!" & _
        "A3:B3="""","""",'c:\temp\[Mappe1.xls]Tabelle1'!A3:B3)"
 
Abhilfe schafft hier das Verschieben der einzulesenden Dateien in eine Ordnerstruktur, die kürzere Dateipfade ergibt, und/oder aber auch, in dem man den kurzen Pfad ermittelt (wie in guten alten Zeiten, z. B. C:\DOKUME~1) und diesen in der Formel zuweist. Eine andere Möglichkeit wäre, die Formel in mehreren Teilen zuzuweisen.
Weitere Infos zum Thema 'Formeln' können der Excel-Hilfe und den 'Links zum Thema' entnommen werden.
Links zum Thema
Description of the limitations for working with arrays in Excel 2000, 2002 and 2003
XL: Problems When You Use .Formula Property of a Range of Cells to Set Values in an Array
XL97: "Not Enough Memory" Error Using Linking Formulas
XL97: Limit of Natural Language Formulas per Worksheet
XL2000: Limit of Natural Language Formulas per Worksheet
XL2000: Run-Time Error Using FormulaArray Property
Entering Long Array Formulas in VBA
Eigene Links zum Thema
Daten aus einer geschlossenen Arbeitsmappe einlesen (ADO)
Daten aus einer geschlossenen Arbeitsmappe einlesen (DAO)

Windows-Version
95
98
ME
NT
2000
XP
Vista
Win 7
Excel-Version
95
97
2000
2002 (XP)
2003
2007
2010


Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 29. Mai 2011