Das Auslesen von Zellen verschiedener .xls Dateien per "Datei öffnen" Dialog

  • Excel

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von ralf.kniese.

    Das Auslesen von Zellen verschiedener .xls Dateien per "Datei öffnen" Dialog

    Hallo zusammen,
    folgendes Szenario:
    Excel 2000
    Ich habe die Excel Datei "C:\Fillmeup.xls" in die verschiedene Zellen aus der Excel Datei "C:\Quelle.xls" importiert werden sollen. Diese Zellen sollen einfach auf dem Tabellenblatt "Tabelle_Fillmeup" in die Spalte H eingetragen werden. Die Zellen der Datei "C:\Quelle.xls" heissen "Quelle1" und "Quelle2",befinden sich auf Tabellenblatt "Tabelle_Quelle" und sind konstant (nicht die Werte, nur die Namen!). Allerdings ist der Dateiname "C:\Quelle.xls" nur einmalig. Daher möchte ich gerne die aktuelle Datei per Dialog "Datei öffnen" auswählen können, aus der die Zellen "Quelle1" und "Quelle2" dann importiert werden.
    Ich kann zwar mittlerweile (von Null Wissen angefangen) Daten aus anderen, fest definierten .xls Dateien importieren (allerdings auch nur gane Zeilen) und auch den Dialog "Datei öffnen" starten, bringe das aber leider nicht zusammen.
    Ich hänge die beiden Codes mal mit dran, bitte nicht auslachen.
    Meine Idee wäre, dass der Dialog nach der Auswahl die Datei nicht öffnet, sondern den Namen für die zweite Schleife definiert.
    Kann mir da vielleicht jemand helfen?
    Vielen Dank im Voraus!
    Code für Dialogbox:
    Sub Demo_GetOpenFilename()
    Dim varRetVal As Variant

    varRetVal = Application.GetOpenFileName( _
    FileFilter:="Microsoft Excel-Dateien (*.xls), *.xls", _
    Title:="EINE Datei zum Öffnen auswählen")

    If varRetVal = False Then Exit Sub

    On Error Resume Next
    Workbooks.Open Filename:=varRetVal
    On Error GoTo 0
    End Sub


    Code für Übertragen von Spalten:
    Sub Übertrag()

    Dim xlApp As Application
    Dim WB As Workbook, Ziel As Range

    Set Ziel = ThisWorkbook.Sheets(1).Columns(2)

    Set xlApp = New Excel.Application

    Set WB = xlApp.Workbooks.Open("C:\Quelle.xls")
    Ziel.Value = WB.Sheets(1).Columns("B").Value
    Set Ziel = Ziel.Offset(0, 1)
    Ziel.Value = WB.Sheets(1).Columns("B").Value
    Set Ziel = Ziel.Offset(0, 1)
    WB.Close

    xlApp.Quit

    Set WB = Nothing: Set xlApp = Nothing
    Set Ziel = Nothing
    End Sub

    Visual Basic-Quellcode

    1. Sub Demo_GetOpenFilename()
    2. Dim varRetVal As Variant
    3. varRetVal = Application.GetOpenFileName( _
    4. FileFilter:="Microsoft Excel-Dateien (*.xls), *.xls", _
    5. Title:="EINE Datei zum Öffnen auswählen")
    6. If varRetVal = False Then Exit Sub
    7. On Error Resume Next
    8. übertrag(varRetVal)
    9. On Error GoTo 0
    10. End Sub
    11. 'Code für Übertragen von Spalten:
    12. Sub Übertrag(datei as string)
    13. Dim xlApp As Application
    14. Dim WB As Workbook, Ziel As Range
    15. Set Ziel = ThisWorkbook.Sheets(1).Columns(2)
    16. Set xlApp = New Excel.Application
    17. Set WB = xlApp.Workbooks.Open(datei)
    18. Ziel.Value = WB.Sheets(1).Columns("B").Value
    19. Set Ziel = Ziel.Offset(0, 1)
    20. Ziel.Value = WB.Sheets(1).Columns("B").Value
    21. Set Ziel = Ziel.Offset(0, 1)
    22. WB.Close
    23. xlApp.Quit
    24. Set WB = Nothing: Set xlApp = Nothing
    25. Set Ziel = Nothing
    26. End Sub


    ich hab nicht ganz verstanden wie du es meinst, aber ich denke mir das es so sein soll, ansonsten erkläre was du möchtest mal etwas genauer bzw deutlicher

    gruss mono
    Das ist meine Signatur und sie wird wunderbar sein!
    Erstmal vielen Dank Mono!
    Und du hast mich schon richtig verstanden, genau das was du gecodet hast wollte ich haben. Nur zwei Sachen noch: Die .xls Datei aus der die Daten gezogen werden, bleibt in 98% der Fälle im Hintergrund geöffnet und muss per Task manager geschlossen werden. Die zweite Sache ist, ich würde gerne einzelne Zellen importiert haben. Diese Zellen habe ich mit Zellnamen versehen, bspw. "Gesamt1".
    Folgenden Code habe ich dann ausprobiert, aber leider klappt er net:
    Set WB = xlApp.Workbooks.Open(datei)
    Ziel.Value = WB.Sheets(1).Cells("Gesamt").Value
    Set Ziel = Ziel.Offset(0, 1)


    Vielleicht ist das einfache austauschen von Columns durch Cells doch zu einfach... :)
    Vielleicht kannst du mir ja nochmal helfen.
    Gruß
    Sebastian
    Fall erledigt!

    Der Code für Excel 2000 muss lauten:

    Private Sub CommandButton1_Click()

    Dim varRetVal As Variant, _

    WBQuell As Workbook, _

    Ziel As Range

    varRetVal = Application.GetOpenFilename( _

    FileFilter:="Microsoft Excel-Dateien (*.xls), *.xls", _

    Title:="EINE Datei zum Öffnen auswählen")



    If varRetVal = False Then Exit Sub



    'Code für Übertragen von Spalten:

    Set Ziel = ActiveWorkbook.Sheets("Tabelle1").Cells(1, 1)

    Set WBQuell = Workbooks.Open(varRetVal)



    Worksheets("Tabelle1").Activate



    Worksheets("Tabelle1").Range("Quelle1").Copy Destination:=Ziel



    Set Ziel = Ziel.Offset(0, 1)

    Worksheets("Tabelle1").Range("Quelle2").Copy Destination:=Ziel



    WBQuell.Close savechanges:=False

    End Sub



    Nochmals vielen Dank an dich Mono! Ein Gruße geht auch an Wolli aus dem herber-Forum und an die tolle VBA Hilfe von Office 2000 ;)

    Gruß

    Sebastian

    Mono schrieb:

    Visual Basic-Quellcode

    1. Sub Demo_GetOpenFilename()
    2. Dim varRetVal As Variant
    3. varRetVal = Application.GetOpenFileName( _
    4. FileFilter:="Microsoft Excel-Dateien (*.xls), *.xls", _
    5. Title:="EINE Datei zum Öffnen auswählen")
    6. If varRetVal = False Then Exit Sub
    7. On Error Resume Next
    8. übertrag(varRetVal)
    9. On Error GoTo 0
    10. End Sub
    11. 'Code für Übertragen von Spalten:
    12. Sub Übertrag(datei as string)
    13. Dim xlApp As Application
    14. Dim WB As Workbook, Ziel As Range
    15. Set Ziel = ThisWorkbook.Sheets(1).Columns(2)
    16. Set xlApp = New Excel.Application
    17. Set WB = xlApp.Workbooks.Open(datei)
    18. Ziel.Value = WB.Sheets(1).Columns("B").Value
    19. Set Ziel = Ziel.Offset(0, 1)
    20. Ziel.Value = WB.Sheets(1).Columns("B").Value
    21. Set Ziel = Ziel.Offset(0, 1)
    22. WB.Close
    23. xlApp.Quit
    24. Set WB = Nothing: Set xlApp = Nothing
    25. Set Ziel = Nothing
    26. End Sub


    ich hab nicht ganz verstanden wie du es meinst, aber ich denke mir das es so sein soll, ansonsten erkläre was du möchtest mal etwas genauer bzw deutlicher

    gruss mono

    Mono schrieb:

    Visual Basic-Quellcode

    1. Sub Demo_GetOpenFilename()
    2. Dim varRetVal As Variant
    3. varRetVal = Application.GetOpenFileName( _
    4. FileFilter:="Microsoft Excel-Dateien (*.xls), *.xls", _
    5. Title:="EINE Datei zum Öffnen auswählen")
    6. If varRetVal = False Then Exit Sub
    7. On Error Resume Next
    8. übertrag(varRetVal)
    9. On Error GoTo 0
    10. End Sub
    11. 'Code für Übertragen von Spalten:
    12. Sub Übertrag(datei as string)
    13. Dim xlApp As Application
    14. Dim WB As Workbook, Ziel As Range
    15. Set Ziel = ThisWorkbook.Sheets(1).Columns(2)
    16. Set xlApp = New Excel.Application
    17. Set WB = xlApp.Workbooks.Open(datei)
    18. Ziel.Value = WB.Sheets(1).Columns("B").Value
    19. Set Ziel = Ziel.Offset(0, 1)
    20. Ziel.Value = WB.Sheets(1).Columns("B").Value
    21. Set Ziel = Ziel.Offset(0, 1)
    22. WB.Close
    23. xlApp.Quit
    24. Set WB = Nothing: Set xlApp = Nothing
    25. Set Ziel = Nothing
    26. End Sub


    ich hab nicht ganz verstanden wie du es meinst, aber ich denke mir das es so sein soll, ansonsten erkläre was du möchtest mal etwas genauer bzw deutlicher

    gruss mono

    Mono schrieb:

    Visual Basic-Quellcode

    1. Sub Demo_GetOpenFilename()
    2. Dim varRetVal As Variant
    3. varRetVal = Application.GetOpenFileName( _
    4. FileFilter:="Microsoft Excel-Dateien (*.xls), *.xls", _
    5. Title:="EINE Datei zum Öffnen auswählen")
    6. If varRetVal = False Then Exit Sub
    7. On Error Resume Next
    8. übertrag(varRetVal)
    9. On Error GoTo 0
    10. End Sub
    11. 'Code für Übertragen von Spalten:
    12. Sub Übertrag(datei as string)
    13. Dim xlApp As Application
    14. Dim WB As Workbook, Ziel As Range
    15. Set Ziel = ThisWorkbook.Sheets(1).Columns(2)
    16. Set xlApp = New Excel.Application
    17. Set WB = xlApp.Workbooks.Open(datei)
    18. Ziel.Value = WB.Sheets(1).Columns("B").Value
    19. Set Ziel = Ziel.Offset(0, 1)
    20. Ziel.Value = WB.Sheets(1).Columns("B").Value
    21. Set Ziel = Ziel.Offset(0, 1)
    22. WB.Close
    23. xlApp.Quit
    24. Set WB = Nothing: Set xlApp = Nothing
    25. Set Ziel = Nothing
    26. End Sub


    ich hab nicht ganz verstanden wie du es meinst, aber ich denke mir das es so sein soll, ansonsten erkläre was du möchtest mal etwas genauer bzw deutlicher

    gruss mono

    HI,

    ich weiß dass dieses Thema schon etwas älter ist, aber nichts desto trotz habe ich eine Frage dazu. Ich nutze den oben stehenden code um aus diversen Dateien zellen in eine Übersichtsdatei per Buttons zu kopieren, nun möchte ich gerne die jeweiligen Dateinamen der Dateien die ich öffne in der Übersichtsdatei auf dem ersten Tabellen Blatt in bestimmen zellen stehen haben. Hierzu habe ich schon einiges ausprobiert, aber nichts hat funktioniert, vllt kann mir ja jmd der ersteller oder auch gerne jmd andreres helfen.

    Danke und Gruß
    El_Piero :)
    Der Dateiname steht in Datei. Den Pfad bekommst Du weg, indem Du "\" mit instrrev suchst.

    Visual Basic-Quellcode

    1. dateiname = Mid$(datei, 1 + InStrRev(datei, "\", -1, vbTextCompare))


    Diesen kannst Du dann einfach mit

    Visual Basic-Quellcode

    1. Sheets("Tabelle1").Cells(reihe,spalte).Value = dateiname


    in die Tabelle kopieren.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Erweiterung erwünscht

    Hallo Zusammen,

    danke für den obigen Code - er funktioniert sehr gut. Ich bin noch nicht so sattelfest in VBA, benötige aber ein paar Erweiterungen um den obigen Code passgenau einsetzen zu können, wie folgt:

    beim Auslesen der zu öffnenden Datei würde ich gern zusätzlich die Möglichkeit haben ein "zu bestimmendes" Tabellenblatt auszuwählen. In dem Tabellenblatt möchte ich dann gern eine bestimmte Zellen.range z.B. T2:AD14 auslesen und übergeben.

    beim Einlesen möchte ich gern die Möglichkeit haben das Tabellenblatt auszuwählen, in welches eingelesen werden soll und auch dort bestimmen, wohin genau die o.g. ausgelsene Zellen.range z.B. T2:AD14 geschrieben werden soll, d.h. in welchen Zellbereich.

    würde mich freuen, wenn jmd mir hier helfen könnte.

    Danke vorab

    Ralf

    Erweiterung erwünscht

    Hallo Zusammen,

    danke für den obigen Code - er funktioniert sehr gut. Ich bin noch nicht so sattelfest in VBA, benötige aber ein paar Erweiterungen um den obigen Code passgenau einsetzen zu können, wie folgt:

    beim Auslesen der zu öffnenden Datei würde ich gern zusätzlich die Möglichkeit haben ein "zu bestimmendes" Tabellenblatt auszuwählen. In dem Tabellenblatt möchte ich dann gern eine bestimmte Zellen.range z.B. T2:AD14 auslesen und übergeben.

    beim Einlesen möchte ich gern die Möglichkeit haben das Tabellenblatt auszuwählen, in welches eingelesen werden soll und auch dort bestimmen, wohin genau die o.g. ausgelsene Zellen.range z.B. T2:AD14 geschrieben werden soll, d.h. in welchen Zellbereich.

    würde mich freuen, wenn jmd mir hier helfen könnte.

    Danke vorab

    Ralf


    peterfido schrieb:


    Dynamisch auswählen oder vorher im Code festlegen?

    am liebsten dynamisch auswählen, aber wenn das zu aufwendig ist, wäre es im Code auch ok
    Dann fang er mal an und poste seine Problemchen. Wie man eine bestimmte Zelle beschreibt habe ich weiter oben schon gepostet. Genau auf diese Art kann man sie auch auslesen. Ein WB als Eingang setzen und ein anderes WB1 als Ausgabe setzen. Dynamisches auswählen geht nur über ein Formular vernünftig. Je nach Verwendungszweck könnte ein Querverweis vorteilhafter sein.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Lösung gefunden

    ok, dann habe ich mich wohl unpräzise ausgedrückt und will mich bemühen dies zu korrigieren.

    Problem:

    Ich habe eine Exceldatei "Zieldatei" mit mehreren Tabellen "Tabelle1, Tabelle2, Tabelle3, etc." und möchte nun aus anderen Exceldateien "Quelldatei1, Quelldatei2, Quelldatei3, etc. " die jeweils ebenfalls mehrere Tabellen "Tabelle1, Tabelle2, Tabelle3, etc." enthalten aus der in jeder Quelldatei jeweils vorhandenen Tabelle "questionnaire" die Inhalte des Zellbereichs T2:AD14 auslesen und in eine der in "Zieldatei" befindlichen Tabellen einlesen lassen - und zwar möchte ich dazu diese Tabelle "auswählen" können und ebenfalls den "empfangenden Zellbreich" bestimmen können.

    Ich hoffe, dass das Problem damit verständlich dargestellt ist :)


    Hallo Zusammen,

    ich hoffe es verstößt nicht gegen die guten Sitten in diesem Forum, auf ein anderes zu verweisen - habe eine angemessene und ebenfalls sehr schöne Lösung gefunden:


    office-loesung.de/ftopic335216_0_0_asc.php

    Danke für Eure Unterstützung

    Ralf

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ralf.kniese“ ()