Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zugriff auf geschlossene Dateien

Forumthread: Zugriff auf geschlossene Dateien

Zugriff auf geschlossene Dateien
23.08.2006 16:28:29
Oliver
Hallo zusammen,
ich möchte mittels einer Formel auf eine geschlossene Excel-Datei zugreifen. Das ist grundsätzlich kein größeres Problem:
='U:\Temp\[Test.xls]Tabelle1'!A1
Schwierig wird es dann, wenn der Pfad bzw. Projektname aus anderen Zelleninhalten zusammengesetzt werden soll. Dies funktioniert weder mit noch ohne INDIREKT:
=INDIREKT("'U:\Temp\[" & B3 & "]Deckblatt'!A1")
Auch der gelesene Trick, das erste Hochkomma mittels GLÄTTEN zu integrieren, hilft nichts:
=INDIREKT(GLÄTTEN(" ' ") & "U:\Temp\[" & B3 & "]Deckblatt'!A1")
Habt ihr eine Idee oder gibt es hierfür keine Lösung (ohne VBA)?
Danke
Oliver
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zugriff auf geschlossene Dateien
23.08.2006 16:29:56
Gerd
Hi,
Indirekt() verlangt eine geöffnete Quelldatei.
mfg Gerd
AW: Zugriff auf geschlossene Dateien
23.08.2006 16:30:32
Eule
Hi Oliver
INDIREKT funktioniert nur mit offenen Dateien!
Gruss Eule
AW: Zugriff auf geschlossene Dateien
23.08.2006 16:35:46
c0bRa
hio...
evtl. hilft dir das hier weiter, ist aber mit VBA:
Indirekt()-Fkt. für geschlossenen Dateien
Rückmeldung nicht vergessen...
c0bRa
I hacked 127.0.0.1
Anzeige
AW: Zugriff auf geschlossene Dateien
23.08.2006 16:53:02
Oliver
Danke zusammen,
immerhin kann ich mir nun das weitere Experimentieren mit INDIREKT sparen...
Eine andere Lösung ohne VBA gibt es nicht?
Die gepostete VBA-Lösung muss ich erst von zu hause aus testen, da dies im Büro nicht geht.
Oliver
AW: Zugriff auf geschlossene Dateien VBA
23.08.2006 16:54:25
UweD
Hallo
per VBA ginge es so..

Sub test()
'Wert lesen aus geschlossener Mappe
Dim wb As Workbook, Z$, ok
Set wb = GetObject("C:\Temp\test.xls")
Z = Range("B3").Value ' das wäre dein "Indirekt"
ok = wb.Worksheets("Tabelle1").Range(Z)
If ok = "" Then
MsgBox ("Leer")
Else
MsgBox (ok)
End If
wb.Close SaveChanges:=True
End Sub

Gruß UweD
(Rückmeldung wäre schön)
Anzeige
AW: Zugriff auf geschlossene Dateien VBA
24.08.2006 00:12:50
bst
Auch Hi,
geschlossen ?
cu, Bernd
--
Option Explicit

Sub test()
    Dim i%
    'Wert lesen aus geschlossener Mappe
    Dim wb As Workbook, Z$, ok
    Set wb = GetObject("C:\Temp\test.xls")
    
    For i = 1 To Workbooks.Count
        Debug.Print i, Workbooks(i).FullName
    Next
    
    Z = Range("B3").Value ' das wäre dein "Indirekt"
    ok = wb.Worksheets("Tabelle1").Range(Z)
    
    If ok = "" Then
        MsgBox ("Leer")
    Else
        MsgBox (ok)
    End If
    
    wb.Close SaveChanges:=True
End Sub

Anzeige
AW: Zugriff auf geschlossene Dateien VBA
25.08.2006 02:15:24
Daniel Eisert
Hallo,
nicht ganz, auch mit GetOjekt wird die Datei geöffnet.
im Gegensatz zu Workbooks.Open bleibt sie allerdings für den User unsichtbar, da das Fenster ausgeblendet wird. (kann man aber einblenden)
Für den weiteren Makroablauf ist halt zu beachten daß das ActiveWorkbook nicht auf die neue Datei wechselt.
Also schon eine interessante Funktion, aber nicht die Lösung für das Problem.
Gruß, Daniel
Anzeige
AW: Zugriff auf geschlossene Dateien VBA
25.08.2006 08:53:32
bst
Morgen Daniel,
ja, das meinte ich damit ;-)
Meiner bescheidenen Meinung nach gibt es überhaupt keine Möglichkeit aus einer Datei Daten zu lesen OHNE diese vorher zu öffnen. Entweder explizit, indem man das selber tut via WorkBooks.Open, GetObject, ... Oder halt implizit indem man das Excel oder VBA im Hintergrund tun läßt - ggf. ohne das in Excel/VBA zu bemerken - via INDIREKT, ExecuteExcel4Macro, ADO, ...
Die M.E. 'bessere' Frage wäre hier:
Welches ist der schnellste Weg Daten aus einer anderen - zur Zeit noch nicht geöffneten - Excel-Datei zu lesen ?
cu, Bernd
Anzeige
AW: Zugriff auf geschlossene Dateien VBA
25.08.2006 11:03:01
David
Hallo,
ich habe genau das gleiche Problem mit dem Indirekt-Öffnen (gut zu wissen, dass das nur mit bereits geöffneten Dateien geht) und würde gerne den gleichen Code verwenden.
Leider habe ich absolut keine Ahnung von Makros.
Kann mir einer sagen, wo (oder ob) in dem Makro die Zellbereiche definiert werden, die kopiert werden und aus welchem Tabellenblatt die Zellen kopiert werden?
Ich möchte folgendes machen:
- Ich habe ca. 30 identisch aufgebaute Excel-Dateien in 30 Unterordnern eines Verzeichnisses.
- In jeder Datei habe ich ein Blatt mit Messwerten (Zellbereich A17 bis G35, in diesem Zellbereich sind aber auch Überschriften u.ä. enthalten – macht aber nix wenn das mitkopiert wird).
- In meinem Hauptverzeichnis will ich eine Übersichts-Excel mit einem Tabellenblatt in dem ich dynamisch die Messwerte in einer Tabelle darstellen will. Ich brauche eine Funktion/Makro, das mir die Messwerte aus den (ungeöffneten) Unterordnern in meine Übersichts-Excel kopiert.
- Ich habe eine Dropdownliste mit allen Dateien aus denen ich wählen kann, und mir eine Funktion gebastelt, die mir einen Textstring mit dem Pfad zu Datei und zum gewünschten Blatt liefert, aber der Indirekt-Befehl kann die Datei ja nicht öffnen.
Könnte man ein Makro machen, das alles für mich erledigt, jedes Mal, wenn ich eine Quelle aus der Dropdownliste gewählt habe?
Oder (vielleicht noch viel einfacher) ein Makro (durch einen Aktualisieren-Button gestartet), das die Datei öffnet, den Indirekt-Befehl ausführt und die Datei wieder schließt. Damit der Indirekt-Befehl die Daten rüberkopiert während die Datei geöffnet war (wenn das funktioniert?)
Sorry für den langen Text, aber ich wollte halbwegs eindeutig sein.
Vielen Dank für alle Antworten.
David
Anzeige
AW: Zugriff auf geschlossene Dateien VBA
25.08.2006 12:16:11
bst
Hallo David,
versuch's vielleicht mal so:
- in A1 schreibe den Pfad zur Quelldatei, z.B. E:\TEST\
- in A2 schreibe den Namen der Quelldatei, z.B. source.xls
- benutze in Deinen Formeln (weiterhin) Indirekt mit A2, z.B.C1: =INDIREKT("[" & A2 & "]Tabelle1!$A$1" )
- erstelle einen Button aus Steuerelemente und gib ihm den Namen cmdUpdate
- tu sowas in das Klassenmodul Deiner Tabelle
Wenn es 'vollautomatisch' gehen soll, nimm zusätzlich ein Worksheet_Change auf, s.u., sonst wirf das einfach raus. Das Teil öffnet die Quelldatei, berechnet neu und schließt sie dann wieder. Könnte eigentlich ausreichen.
HTH, Bernd
--
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:A2")) Is Nothing Then
        Application.EnableEvents = False
        Call cmdUpdate_Click
        Application.EnableEvents = True
    End If
End Sub

Private Sub cmdUpdate_Click()
    Dim strDataFile As String, strDataPath As String
    
    strDataPath = Range("A1")
    strDataFile = Range("A2")
    If strDataFile <> "" And strDataPath <> "" Then
        If Not WorkBookExists(strDataFile) Then
            If Right(strDataPath, 1) <> "\" Then strDataPath = strDataPath & "\"
            If Dir(strDataPath & strDataFile) <> "" Then
                Workbooks.Open strDataPath & strDataFile, ReadOnly:=True
                Me.Calculate
                ActiveWorkbook.Close False
            Else
                MsgBox "Datei nicht gefunden", vbCritical, strDataPath & strDataFile
            End If
        End If
    End If
End Sub

Private Function WorkBookExists(ByVal strName As String) As Boolean
    Dim wb As Workbook
    
    strName = UCase(strName)
    WorkBookExists = True
    
    For Each wb In Workbooks
        If UCase(wb.Name) = strName Then Exit Function
    Next
    WorkBookExists = False
End Function



Anzeige
AW: Zugriff auf geschlossene Dateien VBA
25.08.2006 13:53:51
Hier eine Testdatei von mir
Hallo Bernd,
Danke für Deinen Vorschlag, ich habs mal ausprobiert, aber ohne Wirkung.
Liegt evtl. daran, dass ich eine englische Office-Version habe - Probleme mit Anführungszeichen, usw?
Ich habe mal eine abgespeckte Version meiner Datei ohne (Makro und Commandbuttons) erstellt und angehängt. Das Blatt in dem ich arbeite und in das die Werte kopiert werden sollen heißt "Datenbezug".
Die Dateipfade sind leider extrem lang. Ich habe fleißig kommentiert, was ich zu erreichen versuche, alle Kommentare sind fett/kursiv
https://www.herber.de/bbs/user/36149.xls
Falls Du versuchen kannst, Dein Makro so anzupassen, dass es den gelb hinterlegten Bereich aus der Zieldatei kopiert wäre das sehr nett. Das Ziel-Tabellenblatt heißt immer "Stromaufnahme Aug06".
Der Teilpfad wird in A10, der Dateiname in B10 und der komplette Pfad in A11 erstellt.
Ich war schon mächtig stolz, es so weit mit Bordmitteln gebracht zu haben (ohne VBA). Wenn nur dieses blöde Indirekt funktionieren würde.
Anzeige
AW: Zugriff auf geschlossene Dateien VBA
25.08.2006 15:12:09
bst
Hallo David,
so sollte es mal prinzipiell funktionieren. Siehe die grünen Zellen.
Allerdings gibt's da noch ein ätzendes Problem. Sobald irgendeine Zelle geändert wird, verschwinden die INDIREKT Daten wieder. Ich überlege mir was besseres...
Siehe: https://www.herber.de/bbs/user/36154.xls
cu, Bernd
Anzeige
AW: Zugriff auf geschlossene Dateien VBA
25.08.2006 15:32:56
David
Hi Bernd,
ich schätze ich werde mich noch ein bisschen mehr mit VBA auseinandersetzten müssen, bevor ich kapiere, was das passiert (oder nicht passiert).
Dennoch Danke für Deine Hilfe, ich meld mich nächste Woche mal wieder.
Schönes Wochenende
David
AW: Zugriff auf geschlossene Dateien VBA
25.08.2006 15:38:24
bst
Nochmals Hallo,
so sollte es nun aber gehen, kopiert werden dabei alle als SRC_xxxx definierte Namen.
Es wird jeweils aus dem entsprechenden Bereich kopiert, wenn Du also SRC_xyz als H1:H2 definiertst, so werden die Werte der Zellen H1 und H2 aus der Datentabelle in das Tabellenblatt Datenbezug umkopiert. Die Anzahl der SRC_'s ist egal, ihre Bereichsgröße auch.
Siehe die gefärbten Zellen. Und schau auch unter Einfügen-Namen nach. Und:
- in A1 den kompletten Pfad
- in A2 den Dateinamen
- in A3 den Namen der Quell-Tabelle
eintragen.

Die Datei https://www.herber.de/bbs/user/36157.xls wurde aus Datenschutzgründen gelöscht

cu, Bernd
Anzeige
Super! Funktioniert genial. Danke!
28.08.2006 10:02:53
David
Hallo Bernd,
habe das Makro und den Command-Button noch auf das Blatt mit dem Diagramm kopiert und die Addresszellen ebenfalls (Code entsprechend geändert).
Funktioniert bestens.
Vielen Dank nochmal. Echt ein Spitzensupport.
David
OwT: Bitteschön und einen schönen Tag noch
28.08.2006 10:35:36
bst
.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Zugriff auf geschlossene Excel-Dateien


Schritt-für-Schritt-Anleitung

Um auf eine geschlossene Excel-Datei zuzugreifen, kannst du folgende Schritte befolgen:

  1. Verwende die richtige Syntax: Um auf eine bestimmte Zelle in einer geschlossenen Datei zuzugreifen, kannst du die folgende Formel verwenden:

    ='U:\Temp\[Test.xls]Tabelle1'!A1
  2. Dynamischen Verweis erstellen: Wenn du den Pfad oder Dateinamen dynamisch gestalten möchtest, musst du sicherstellen, dass die Datei geöffnet ist, da die INDIREKT-Funktion nur mit offenen Dateien funktioniert. Ein Beispiel für eine dynamische Referenz könnte sein:

    =INDIREKT("'U:\Temp\[" & B3 & "]Deckblatt'!A1")
  3. VBA-Lösung: Wenn du den Zugriff auf eine geschlossene Datei ohne die Verwendung von INDIREKT möchtest, benötigst du ein Makro. Hier ist ein einfaches Beispiel, das du in den VBA-Editor einfügen kannst:

    Sub test()
       Dim wb As Workbook
       Dim Z As String
       Set wb = GetObject("C:\Temp\test.xls")
       Z = Range("B3").Value
       MsgBox wb.Worksheets("Tabelle1").Range(Z)
       wb.Close SaveChanges:=True
    End Sub

Häufige Fehler und Lösungen

  • Fehler: INDIREKT funktioniert nicht: Dies liegt daran, dass INDIREKT nur mit geöffneten Dateien funktioniert. Wenn du auf eine geschlossene Datei zugreifen möchtest, ist eine VBA-Lösung erforderlich.

  • Fehler: Verweis auf andere Datei funktioniert nicht: Überprüfe den Pfad und die Dateinamen. Achte darauf, dass sie korrekt sind und keine Tippfehler enthalten.


Alternative Methoden

  • SVERWEIS auf geschlossene Datei: Es gibt keine direkte Möglichkeit, SVERWEIS auf eine geschlossene Datei anzuwenden. Du kannst jedoch ein Makro erstellen, das die Datei öffnet, die Werte abruft und sie wieder schließt.

  • Excel externer Bezug dynamisch: Um einen externen Bezug dynamisch zu gestalten, kannst du die Dateipfade und Namen in Zellen speichern und sie in der Formel referenzieren. Zum Beispiel:

    =INDIREKT("[" & A2 & "]Tabelle1!$A$1")

Praktische Beispiele

  1. Dynamischer Bezug auf eine geschlossene Datei:

    • In Zelle A1 den Pfad zur Datei einfügen, z.B. E:\TEST\
    • In Zelle A2 den Dateinamen einfügen, z.B. source.xls
    • Verwende in einer anderen Zelle:
      =INDIREKT("[" & A2 & "]Tabelle1!$A$1")
  2. Makro für das Aktualisieren von Daten:

    • Erstelle einen Button, der ein Makro zum Öffnen und Schließen der Datei ausführt:
      Private Sub cmdUpdate_Click()
      Dim strDataFile As String, strDataPath As String
      strDataPath = Range("A1").Value
      strDataFile = Range("A2").Value
      If strDataFile <> "" And strDataPath <> "" Then
         Workbooks.Open strDataPath & strDataFile, ReadOnly:=True
         Me.Calculate
         ActiveWorkbook.Close False
      End If
      End Sub

Tipps für Profis

  • Verwende benannte Bereiche: Indem du benannte Bereiche in deinen Excel-Dateien verwendest, kannst du die Formeln klarer und einfacher gestalten, was die Wartung erleichtert.

  • Ereignisgesteuertes Makro: Nutze die Worksheet_Change-Ereignisprozedur, um automatisch Daten zu aktualisieren, wenn sich eine Zelle ändert.

  • Fehlerbehandlung in VBA: Implementiere Fehlerbehandlungsroutinen in deinen VBA-Skripten, um unerwartete Fehler elegant zu handhaben.


FAQ: Häufige Fragen

1. Funktioniert INDIREKT mit geschlossenen Dateien? Nein, INDIREKT benötigt, dass die Datei geöffnet ist. Für geschlossene Dateien muss auf VBA zurückgegriffen werden.

2. Wie kann ich sicherstellen, dass meine Verknüpfung aktualisiert wird? Verwende VBA, um die Datei zu öffnen, die Daten zu aktualisieren und sie dann wieder zu schließen. So hast du die Kontrolle über den Aktualisierungsprozess.

3. Gibt es eine Möglichkeit, den Zugriff auf andere Dateien zu automatisieren? Ja, du kannst ein VBA-Makro erstellen, das beim Auswählen einer Datei in einer Dropdownliste automatisch die Daten aus der geschlossenen Datei abruft.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige