Daten aus ungeöffneten Dateien per VBA auslesen
#1
Hallo liebes Forum !
Ich hätte wieder ein Anliegen:
Ich möchte aus mehreren Dateien einige Daten auslesen, aber möchte um Zeit zu sparen diese nicht öffnen müssen.
Ich habe ein Makro von Beverly, das im Grunde bestens funktioniert, aber ist leider hier nicht anwendbar, da die auszulesenden Daten der Quelldatei leider in nicht fixen, sondern variablen Zeilen stehen können. Die Spalte ist aber fix.
Ich habe schon mit loLetzte und loErste versucht, aber das funktioniert nicht.
Außerdem wollte ich auch einen zusammenhängenden Datenblock auslesen, wenn das überhaupt möglich ist.

Hier das Makro von Beverly:

Code:
geschrieben von:  Beverly (IP bekannt)
Datum: 05.02.08 07:22

hier eine Möglichkeit, ohne die Arbeitsmappen zu öffnen

Sub daten_uebernehmen()
    Dim strFile As String   ' Variable für die Arbeitsmappe
    Dim strPath As String   ' Variable für den Pfad
    Dim loLetzte As Long    ' Variable für die lettze belegte Zelle
    ' Bidschirmaktualisierung aus
    Application.ScreenUpdating = False
    strPath = "C:\Test\"          ' Zuweisen Pfadname; Pfad bitte anpassen!
    strFile = Dir(strPath & "*.xls") ' Name der ersten Arbeitsmappe im Pfad ermitteln
    ' Schleife über alle im Verzeichnis vorhandenen Arbeitsmappen
    Do While strFile <> ""
        ' Name der Arbeitsmappe muss verschieden von der Mappe mit dem Code sein (damit diese nicht berücksichtigt wird)
        ' die If-Anweisung ist nur erforderlich, falls Mappe mit dem Code im selben Verzeichnis
        If strFile <> ThisWorkbook.Name Then
            ' letzte belegte Zelel in Spalte A ermitteln
            loLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
            ' die ersten 4 Zeichen des Dateinamen werden in Spalte A geschrieben
            Cells(loLetzte + 1, 1) = Left(strFile, 4)
            ' in Spalte B:D wird die Formel eingetrage, damit ein Bezug zur geschlossenen Arbeitsmappe (Zellen A5, D7 und E8) entsteht
            Cells(loLetzte + 1, 2).Formula = "='" & strPath & "[" & strFile & "]Tabelle1'!A5"
            Cells(loLetzte + 1, 3).Formula = "='" & strPath & "[" & strFile & "]Tabelle1'!D7"
            Cells(loLetzte + 1, 4).Formula = "='" & strPath & "[" & strFile & "]Tabelle1'!E8"
        End If
        ' Namen der nächsten Arbeitsmappe auslesen
        strFile = Dir()
    Loop
    ' Bereich von A1:E bis zur lettzen belegten Zeile kopieren
    Range("A1:E" & loLetzte + 1).Copy
    ' Einfügen nur Werte (Formeln werden durch ihre Werte ersetzt,nur mehr
    Werte in den Zellen.
    Range("A1:E" & loLetzte + 1).PasteSpecial Paste:=xlPasteValues
    ' Zwischenablage leeren
    Application.CutCopyMode = False
    ' Bildschirmaktualisierung ein
    Application.ScreenUpdating = True
End Sub

Es wird davon ausgegangen, dass die Tabelle, aus der die Daten übernommen werden sollen, Tabelle1 heißt (bei Erfordernis anpassen).

Hat jemand eine Idee, wie das zu lösen wäre ?
Vielen Dank für Eure wertvolle Hilfe.
Liebe Grüße aus Innsbruck
Helmut
Top
#2
Hallo Helmut,

du schreibst aber nicht, nach welchen Kriterien festgelegt wird, welche Zeile ausgelesen werden soll.
Möchtest Du die letzte belegte Zeile in der geschlossenen Datei ermitteln? Das ginge nur über einen Umweg.

Was spricht dagegen, die Dateien im Hintergrund zu öffnen? Wenn sie schreibgeschützt geöffnet wird, kann sie auch von anderen geöffnet sein, und Du kannst trotzdem Deine Daten einlesen.
Das Einlesen könnte sogar schneller sein und Du kannst dann gezielt nach Daten suchen und diese abgreifen.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • heli
Top
#3
Hallo Atilla,

Du bist, wie immer der Erste und wahrscheinlich der Beste, der sich meldet.
Zu deiner Frage nach welchen Kriterien die Zeile ausgewählt wird: Es ist abhängig von der Anzahl der in der Tabelle benützten Zeilen, welche sich nicht einfach, ohne zu öffnen bestimmen lässt.

Nachdem Du mich darin bestärkst, die Dateien doch besser zu öffnen, werde ich es auch so machen.
Ich habe dazu schon ein Makro zusammengestellt, nur dachte ich, vielleicht würde es schneller laufen, was ja offenbar nicht sein muss.
Vielen Dank für Deine Hilfe.
Liebe Grüße
Helmut
Top
#4
Hallo heli,

wenn Du weist, wann Du aus welchen Zellen Daten holen musst, könnte man den code von Beverly so anpassen, dass er je nach vorgegebener Bedingung aus anderen Bereichen Daten holt. Alternativ kannst Du einen größeren Bereich übernehmen, der alle Fälle einschließt, und dann in der Zieldatei die Auswahl treffen.

Man kann auch mehrere Daten mit einer Datenbankabfrage auf einen Ritt aus einer geschlossenen Mappe holen. Man muss dazu die Verbindungstreiber laden und eine Abfrage mit entsprechenden Bedingungen generieren. Du könntest z.B. aus einer "Adressdatenbank" - also einer Exceldatei mit den entsprechenden Daten, ohne Bedingung alles oder mit Bedingung alle Einträge holen, die in einem Bestimmten Ort wohnen und dort in einer bestimmten Straße oder Postleitzahl oder alle Meiers aus überall usw. Ich nutze so was auch ganz gern, vor allem, wenn mehrere Nutzer im Netzwerk mit den Daten der Datei arbeiten sollen.
Peter Haserodt hat das recht ausführlich beschrieben: http://www.online-excel.de/excel/singsel_vba.php?f=135
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • heli
Top
#5
Hi,

(26.12.2014, 07:33)schauan schrieb: Peter Haserodt hat das recht ausführlich beschrieben: http://www.online-excel.de/excel/singsel_vba.php?f=135

da ich das sehr interessant finde, habe ich das gleich versucht nachzubilden.
  • Datei erstellt
  • die Verweise auf die Library 2.8 und 6.1 angekreuzt
  • aus dem Bereich B2:C13 eine Tabelle gemacht: STRG-T
  • im Tabellen-Layout die Tabelle mit 'Quelle' benannt
  • abgespeichert als ado1a bis ado1c
  • nur 1a und 1b geöffnet
  • in 1a das Makro eingefügt
  • Codeteil ersetzt
Leider komme ich schon über das erste Makro nicht hinaus, d.h. wenn ich das Makro starte, kommt die Meldung: " 'Quelle$' ist kein gültiger Name " ...

Was jetzt?
Top
#6
Hallo,

könnte es sein, dass die Webseite momentan nicht erreichbar ist?

Wenn ich auf den Link klicke bekomme ich eine 403-Forbidden Meldung. Auch der Versuch www.online-excel.de direkt aufzurufen scheitert bei mir im Moment.

Muss ich mir jetzt Sorgen machen oder geht es anderen auch so?
Gruß
Peter
Top
#7
Peter schrieb:Muss ich mir jetzt Sorgen machen [...]?
Hallo Peter!
Heute Morgen gings noch, vllt. steht gerade jemand auf der Leitung.
(oder Dein Namensvetter hat was für Komödien, die Nordkorea aufs Korn nehmen):05:

Gruß, Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#8
Hallo Peter

Heute Morgen war das Forum nicht erreichbar.
Mittlerweile funktioniert der Link wieder:
http://www.online-excel.de/fom/fo_na.php?f=1

Vielleicht ist das nur ein temporäres Problem.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Top
#9
Hallöchen,

auch ich bekomme die 403-Forbidden Meldung.
Allerdings ging der Link noch.
Top
#10
Hi,

um 12:11 h ging der Link noch, momentan nicht mehr.
Top


Gehe zu:


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