Datei-Öffnung aus Excel heraus
#1
Hallo. ich bin noch neu/unerfahren mit VBAs, aber habe gerade deswegen folgende Frage:

Ich greife aus einem Excel-Blatt auf verschiedene Dateien mit indirekt() zu, die Dateinamen werden aus dem Excel-Blatt heraus ermittelt.
Da nun für Zugriff via indirekt() die jeweiligen Dateien bereits geöffnet sein müssen, suche ich fürs Öffnen einen Weg.
Man findet VBA-Hinweise mit subs und workbooks.open etc., aber wie kann ich diese aus Excel heraus (möglichst einfach und unauffällig) aufrufen?    
Also zB als eine Funktion wie sverweis() o.ä., ohne dass man erst ein Makro aktivieren muss ? 
Und muss für indirekt() auch ein spezifisches Worksheet geöffnet werden, oder reicht das Workbook ?
Danke, Hajo
Antworten Top
#2
(25.11.2025, 17:46)Hajo1 schrieb: Ich greife aus einem Excel-Blatt auf verschiedene Dateien mit indirekt() zu, die Dateinamen werden aus dem Excel-Blatt heraus ermittelt.
Da nun für Zugriff via indirekt() die jeweiligen Dateien bereits geöffnet sein müssen, suche ich fürs Öffnen einen Weg.

Das wird nix.

Also, uralt aber immer noch gültig:
https://learn.microsoft.com/en-us/answers/questions/4776347/how-do-i-use-a-variable-for-the-file-name-when-ins?forum=msoffice-msoffice_excel-msoffice_custom-mso_2010&referrer=answers

Die angesprochene Pull function von Harlan Groove geht zurück bis in das Jahr 2003... irgendwo habe ich noch eine Version...

Da die Daten über eine 2te Instanz geladen werden ist das ganze nicht ohne, und je mehr Daten desto langsamer wird es. Falls Du die Idee hast via SVERWEIS die Spalte einer anderen geschlossenen Datei zu durchsuchen: Vergiss es.

Außerdem macht das heutzutage niemand mehr, seit 2010 gibt es Power Query und damit kann man die nötigen Datei aus allen geschlossenen Dateien lesen und importieren.

Andreas.
Antworten Top
#3
Moin Andreas, danke für die Einordnung, spart mir vergebliche Bemühungen.
Power Query ist aber auch kein Selbstläufer ...
Antworten Top
#4
... grundsätzlich doch ...

Also, hier mal ein erster Ansatz. Damit bekommst Du ein Array, in dem alle Formeln aufgelistet werden, die ein ".xls" enthalten.
Code:
Sub ListFormulas()
Dim rngAllCells As Range, rngOneCell As Range, arrExt
ReDim arrExt(0)
Set rngAllCells = ActiveSheet.UsedRange.SpecialCells(xlFormulas)
For Each rngOneCell In rngAllCells
  If InStr(1, rngOneCell.Formula, ".xls") Then
    arrExt(UBound(arrExt)) = rngOneCell.Formula
    ReDim Preserve arrExt(UBound(arrExt) + 1)
  End If
Next
End Sub

Natürlich muss man weiter differenzieren
- .xls könnte auch nur ein Text sein - siehe Schreibweise für externe Zugriffe mit eckigen Klammern usw.
- es sollte schon auch INDIREKT drin stehen, andere Funktionen funktionieren ggf. auch ohne und diese Funktionen sollten kein Grund für ein Öffnen sein
- in einer Zelle könnten in der Formel auch mehrere INDIREKT mit Zugriffen auf unterschiedliche Dateien stehen
- ...
Man kann dann vor dem Öffnen auch prüfen, ob die Dateien vielleicht schon geöffnet sind, oder auch grundsätzlich, ob sie (noch / an der erwarteten Stelle) existieren usw.

Wenn man schon VBA verwendet, kann man auch überlegen, ob man bei Änderung der in INDIREKT zur Bildung des Dateinamens oder des Zielblattes oder der Zielzelle verwendeten Quellzellen die Funktion ändert - also kein INDIREKT nimmt. Allerdings sollte man dabei wirklich sicher gehen, dass das Ziel, wie in der geänderten Formel geschrieben, existiert Wink
Manches könnte man auch mit PQ flexibel gestalten, wie Andreas schon anmerkte  ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
FWIW:

Hier ein Link zu der angesprochenen Pull-Funktion:
https://groups.google.com/g/microsoft.pu...2jdMD2SeIJ
Antworten Top
#6
(25.11.2025, 17:46)Hajo1 schrieb: Hallo. ich bin noch neu/unerfahren mit VBAs, aber habe gerade deswegen folgende Frage:

Ich greife aus einem Excel-Blatt auf verschiedene Dateien mit indirekt() zu, die Dateinamen werden aus dem Excel-Blatt heraus ermittelt.
Da nun für Zugriff via indirekt() die jeweiligen Dateien bereits geöffnet sein müssen, suche ich fürs Öffnen einen Weg.
Man findet VBA-Hinweise mit subs und workbooks.open etc., aber wie kann ich diese aus Excel heraus (möglichst einfach und unauffällig) aufrufen?    
Also zB als eine Funktion wie sverweis() o.ä., ohne dass man erst ein Makro aktivieren muss ? 
Und muss für indirekt() auch ein spezifisches Worksheet geöffnet werden, oder reicht das Workbook ?

...wenn Pfad und Dateiname sowieso schon im Blatt stehen, warum machst Du keinen Hyperlink draus?
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#7
Vielen Dank Euch allen - gibt im Moment viele '?' bei mir, muss da etwas nacharbeiten ...
(wie gesagt, neu/unerfahren in der VBA/PQ/...-Materie)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste