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

Forumthread: Bereich aus geschlossener Datei auslesen

Bereich aus geschlossener Datei auslesen
24.12.2016 19:46:52
Breu
Die folgende Anweisung funktioniert so einwandfrei. Ich möchte sie jetzt aber so umschreiben das der Auslese Bereich und der Einfüge Bereich nicht Identisch sind. Der Einlese Bereich soll dann C1:D10 sein
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 = "E:\breile\Documents"
datei = "Test.alt.xlsm"
blatt = "Kw01"
Set bereich = Range("A10:B20")
'** 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
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

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereich aus geschlossener Datei auslesen
24.12.2016 19:54:55
Hajo_Zi
ich poste immer dies.
Option Explicit
Public Function GetDataClosedWB(SourcePath As String, _
SourceFile As String, sourceSheet As String, _
SourceRange As String, TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org
' wird durch die HoleDaten aufgerufen
Dim strQuelle       As String
Dim Zeilen          As Long
Dim Spalten         As Byte
On Error GoTo InvalidInput
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 & ")"
.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
Public Sub HoleDaten()
' Die Funktion arbeitet mit der obrigen GetDataClosedWB zusammen
Dim Pfad            As String
Dim Dateiname       As String
Dim Blatt           As String
Dim Bereich         As String
Dim Ziel            As Range
Pfad = "L:\Eigene Dateien\Hajo\Internet\Test\2009\"
Dateiname = "Beispiel Forum 30.xlsm" ' aus welcher Datei soll er holen?
Blatt = "Tabelle1"  ' von welcher Tabelle soll er holen?
Bereich = "A1:B9"   ' aus welchem Bereich soll er holen?
Set Ziel = ActiveSheet.Range("A1")  ' in welchen Bereich soll er kopieren? Genauer gesagt:  _
Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
MsgBox "Daten importiert"
End If
End Sub


Anzeige
AW: Bereich aus geschlossener Datei auslesen
24.12.2016 20:03:03
Breu
Danke für deine schnelle Antwort. Ich werde das mal ausprobieren. Wäre es dennoch möglich den Code von mir umzuschreiben
AW: Bereich aus geschlossener Datei auslesen
24.12.2016 20:09:59
Breu
Dies funktioniert nur bedingt. Neuer Einlese Bereich ist o.k, doch zusetzlich werden im alten Einlese Bereich die Zell Namen eingetragen (A10, A11, A12 usm.)
AW: Bereich aus geschlossener Datei auslesen
24.12.2016 20:29:43
Breu
Dies funktioniert nur bedingt. Neuer Einlese Bereich ist o.k, doch zusetzlich werden im alten Einlese Bereich die Zell Namen eingetragen (A10, A11, A12 usm.)
Anzeige
AW: Bereich aus geschlossener Datei auslesen
24.12.2016 20:57:16
Breu
Vielen Dank euch beiden. Habe mich für die Idee vom Werner entschieden
Frohe Weihnachten und ein gutes neues Jahr
AW: Danke für die Rückmeldung
24.12.2016 21:07:29
Werner
Hallo Christian,
jetzt hast du dir selbst geantwortet.
Noch was: Dann teile bitte im VBA-Forum mit, dass dein Problem gelöst ist, nicht dass sich dort auch noch jemand - und dann umsonst - damit beschäftigt.
Wenn ich vorher mitbekommen hätte, dass es sich um Crossposting handelt, dann hätte ich mich wahrscheinlich gar nicht damit beschäftigt. Ich halte nämlich, genau wie der Forenbetreiber (lies mal die Forenregeln), nichts von Crossposting.
Trotzdem Danke und dir auch schöne Feiertage.
Gruß Werner
Anzeige
AW: Danke für die Rückmeldung
24.12.2016 21:20:14
Breu
Vielen Dank! Problem wurde gelöst
AW: Nochmal NACHRICHT im VBA-FORUM
24.12.2016 21:44:12
Werner
Hallo Christian,
das weiß ich selbst und jeder andere kann es nachlesen.
Du sollst nicht hier, sondern im VBA-Forum (dort hast du die Frage auch eingestellt) eine Nachricht verfassen, dass das Problem gelöst ist.
Oder ist es dir egal, dass sich dort dann nochmal jemand damit beschäftigt?
Gruß Werner
Anzeige
AW: Nochmal NACHRICHT im VBA-FORUM
24.12.2016 21:47:44
Breu
ich weis leider nicht wie das funktioniert! Bin hier neu
AW: Ich geb auf, habe es gemacht. o.w.T
24.12.2016 22:04:52
Werner
AW: Bereich aus geschlossener Datei auslesen
24.12.2016 20:05:15
Werner
Hallo Christian,
wenn ich dich richtig verstanden habe, dann soll der Bereich in den die Daten eingefügt werden ein anderer sein!?
ActiveSheet.Cells(zelle.Row - 9, zelle.Column + 2).Value = GetValue(pfad, datei, blatt, zelle)
Übrigens ist der Bereich A10:B20 (11 Zeilen) größer als C1:D10 (10 Zeilen)
Gruß Werner
Anzeige
AW: Bereich aus geschlossener Datei auslesen
24.12.2016 20:41:47
Werner
Hallo Christian,
du antwortet auf den Beitrag von HaJo, kann es sein, dass du mich meinst?
Versuch mal so, ist aber ungetestet.
'** Zellen umwandeln
zelle.offset(-9, 2) = zelle.Address(False, False)
'** Eintragen in Bereich
ActiveSheet.Cells(zelle.Row - 9, zelle.Column + 2).Value = _
GetValue(pfad, datei, blatt, zelle.offset(-9, 2))
Next zelle
End Sub
Gruß Werner
Anzeige
AW: Bereich aus geschlossener Datei auslesen
24.12.2016 21:49:45
Breu
Vielen dank an alle!!!
Problem wurde gelöst
;

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
Anzeige

Infobox / Tutorial

Daten aus geschlossener Excel-Datei auslesen


Schritt-für-Schritt-Anleitung

Um Daten aus einer geschlossenen Excel-Datei auszulesen, kannst du VBA (Visual Basic for Applications) verwenden. Hier ist eine einfache Anleitung, wie du dies umsetzen kannst:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul: Rechtsklicke im Projekt-Explorer und wähle Einfügen > Modul.
  3. Füge folgenden Code ein, um einen Bereich aus einer geschlossenen Datei auszulesen:
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 = "E:\breile\Documents"
    datei = "Test.alt.xlsm"
    blatt = "Kw01"
    Set bereich = Range("A10:B20") ' Bereich, der ausgelesen werden soll
    ' Bereich auslesen
    For Each zelle In bereich
        ' Zellen umwandeln und eintragen
        ActiveSheet.Cells(zelle.Row, zelle.Column).Value = GetValue(pfad, datei, blatt, zelle)
    Next zelle
End Sub

Private Function GetValue(pfad, datei, blatt, zelle)
    ' Daten aus geschlossener Arbeitsmappe auslesen
    Dim arg As String
    If Right(pfad, 1) <> "\" Then pfad = pfad & "\"
    If Dir(pfad & datei) = "" Then
        GetValue = "Datei nicht gefunden"
        Exit Function
    End If
    arg = "'" & pfad & "[" & datei & "]" & blatt & "'!" & Range(zelle).Range("A1").Address(, , xlR1C1)
    GetValue = ExecuteExcel4Macro(arg)
End Function
  1. Passe den Code an, indem du den Pfad, Dateinamen, Blattnamen und den Bereich, den du auslesen möchtest, änderst.

Häufige Fehler und Lösungen

  • Datei nicht gefunden: Überprüfe, ob der angegebene Pfad und Dateiname korrekt sind. Achte darauf, dass die Datei tatsächlich existiert.
  • Ungültiger Bereich: Stelle sicher, dass der angegebene Bereich in der geschlossenen Datei korrekt ist. Andernfalls erhältst du eine Fehlermeldung.
  • Zellen werden überschrieben: Achte darauf, dass der Zielbereich in deiner aktiven Tabelle nicht bereits mit Daten gefüllt ist.

Alternative Methoden

Wenn du keine VBA verwenden möchtest, gibt es auch die Möglichkeit, Daten aus einer geschlossenen Excel-Datei auszulesen, indem du die Funktion =GetValue() in einer Zelle verwendest. Diese Methode erfordert jedoch, dass du die Datei einmal öffnest, um die Formeln zu definieren.

Zusätzlich kannst du die Power Query-Funktion in Excel verwenden, um Daten aus geschlossenen Excel-Dateien zu importieren, was eine benutzerfreundliche Methode darstellt.


Praktische Beispiele

Hier ist ein Beispiel, wie du Daten aus einer geschlossenen Datei mit VBA kopieren kannst:

Public Sub HoleDaten()
    Dim Pfad As String
    Dim Dateiname As String
    Dim Blatt As String
    Dim Bereich As String
    Dim Ziel As Range

    Pfad = "L:\Eigene Dateien\Hajo\Internet\Test\2009\"
    Dateiname = "Beispiel Forum 30.xlsm"
    Blatt = "Tabelle1"
    Bereich = "A1:B9"
    Set Ziel = ActiveSheet.Range("A1")

    If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
        MsgBox "Daten importiert"
    End If
End Sub

In diesem Beispiel wird der Bereich A1:B9 aus der Datei Beispiel Forum 30.xlsm importiert und in die aktive Tabelle eingefügt.


Tipps für Profis

  • Verwende Option Explicit in deinen VBA-Modulen, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Nutze Fehlerbehandlungsroutinen in deinem Code, um besser mit unerwarteten Situationen umzugehen.
  • Überprüfe regelmäßig, ob die Quelle der Daten (geschlossene Datei) aktualisiert wurde, um sicherzustellen, dass du die neuesten Informationen erhältst.

FAQ: Häufige Fragen

1. Wie kann ich Daten aus einer geschlossenen Excel-Datei ohne VBA auslesen?
Du kannst dies mit der GetValue-Funktion in einer Zelle tun, jedoch ist der Prozess weniger flexibel als mit VBA.

2. Kann ich Daten aus mehreren geschlossenen Excel-Dateien gleichzeitig auslesen?
Ja, dies ist möglich, erfordert jedoch zusätzliche Programmierung in VBA, um die verschiedenen Dateien zu durchlaufen und die Daten zu extrahieren.

3. Welche Excel-Version benötige ich für diese Methoden?
Die beschriebenen Methoden funktionieren in Excel 2010 und neueren Versionen. Achte darauf, dass VBA aktiviert ist.

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