Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1292to1296
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten aus Files / Ordner lesen

Daten aus Files / Ordner lesen
11.01.2013 15:39:09
Selina
Guten Tag
Ich hoffe, auch bei meinem aktuellen VBA – Problem auf Eure tolle Hilfe zählen zu dürfen:
In einem bestimmten Verzeichnis in C:\Temp hab ich mehrere Excel-Dateien gespeichert.
Diese Dateien beinhalten alle auf dem ersten Registerblatt in der Spalte A irgendwo Nummern.
Die Nummern selber stehen in den Files jeweils in Spalte A untereinander.
Beispiel: im ersten File stehen in Spalte A ab der Zeile 22 total 9 Nummern untereinander.
Im zweiten File stehen in der Spalte A ab der Zeile 14 total 4 Nummern untereinander.
Ich suche nun eine Möglichkeit, mittels einer Makro-Schlaufe aus allen Dateien in diesem Verzeichnis
alle Nummern aus den Spalten A zu lesen und diese in meiner aktuellen Arbeitsmappe (aus welcher ich das Makro starte)
gesammelt (also wie eine Datensammlung) auf einem Tabellenblatt zusammenzufassen.
In unserem Beispiel aus den zwei Files müsste ich nun also nach dem Makro-Durchlauf in meiner Arbeitsmappe
Nun total 13 Nummern untereinander aufgelistet erhalten.
Geht das irgendwie ?
Bin Euch für jegliche Ratschläge und Beispiele äusserst dankbar !

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

Betreff
Datum
Anwender
Anzeige
AW: Daten aus Files / Ordner lesen
13.01.2013 02:01:31
fcs
Hallo Selina,
das folgende Makro ist das Grundgerüst.
ggf. muss du noch ein paar Anpassungen machen.
Gruß
Franz
'Makro erstellt unter Excel 2010
Sub Hole_Nummern_aus_Dateien()
Dim varVerzeichnis As Variant
Dim strDatei As Variant
Dim wksZiel As Worksheet
Dim wbkQuelle As Workbook, wksQuelle As Worksheet
Dim Zeile_Z As Long
Dim Zeile_Q As Long, Zeile_Q1 As Long, Zeile_Q2 As Long
Dim iCount As Integer
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Verzeichnis mit den Quell-Dateien auswählen"
.AllowMultiSelect = False
.InitialFileName = "C:\Temp"
If .Show = -1 Then
varVerzeichnis = .SelectedItems(1)
Else
Exit Sub
End If
End With
Set wksZiel = ActiveSheet 'Tabelle in die Nummern eingetragen werden sollen
With wksZiel
'letzte mit Dtaeneintrag in Splate A der Zieltabelle
Zeile_Z = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
strDatei = Dir(varVerzeichnis & "\*.xls*")
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Do Until strDatei = ""
iCount = iCount + 1
Application.StatusBar = "Datei-Nr. " & iCount & "  -  " & strDatei
'QuellDatei schreibgeschützt öffnen
Set wbkQuelle = Application.Workbooks.Open( _
Filename:=varVerzeichnis & "\" & strDatei, _
ReadOnly:=True)
Set wksQuelle = wbkQuelle.Worksheets(1)
With wksQuelle
'letzte Zeile in Spalte A = letzte Zeile mit einer Nummer
Zeile_Q2 = .Cells(.Rows.Count, 1).End(xlUp).Row
'1. Zeile mit einer Nummer ermitteln
Zeile_Q1 = Zeile_Q2
Zeile_Q = Zeile_Q1
'Zeilen rückwärts zählen und prüfen, ob Zelle in Spalte A nummerischen Inhalt hat
Do While IsNumeric(.Cells(Zeile_Q, 1).Text)
If Zeile_Q = 1 Then
Zeile_Q1 = 1
Exit Do
Else
Zeile_Q1 = Zeile_Q
End If
Zeile_Q = Zeile_Q - 1
Loop
'Nummern in Zieltabelle übertragen
For Zeile_Q = Zeile_Q1 To Zeile_Q2
Zeile_Z = Zeile_Z + 1
wksZiel.Cells(Zeile_Z, 1).Value = .Cells(Zeile_Q, 1).Value
Next
End With
'Quelldatei wieder schliessen
wbkQuelle.Close savechanges:=False
Set wbkQuelle = Nothing
Set wksQuelle = Nothing
strDatei = Dir
Loop
With Application
.StatusBar = False
.ScreenUpdating = True
.EnableEvents = True
End With
Set wksZiel = Nothing
MsgBox "Auslesen der Daten abgeschlossen"
End Sub

Anzeige
AW: Daten aus Files / Ordner lesen
13.01.2013 10:57:16
Selina
guten Tag Franz
vielen dank für dieses tolle, komplexe und umfangreiche Grundgerüst.
ich werde dieses mal einbauen und testen / anpassen.
selbstverständlich poste ich dann die Ergebnisse hier
Selina

AW: Daten aus Files / Ordner lesen
13.01.2013 11:16:52
Selina
so
habe nun deinen obigen code mal in ein allgemeines modul kopiert und mal anhand des verzeichnisses c:\ temp und der Datei Muster.xlsx getestet (siehe Datei im Link)
https://www.herber.de/bbs/user/83376.xlsx
der code bringt mich richtigerweise soweit, dass ich ein verzeichnis auswählen kann (also c:\temp) es beginnt dann mit dem auslesen der daten.
aber ...
in der Muster-Datei gibts beispielsweise zwei Zahlen in Spalte A
es wird nur der zweite Datensatz ausgelesen. Warum hab ich jetzt noch nicht rausgefunden.
Gleiches geschieht, wenn ich mehrere solche Musterdateien in C:\temp kopiere mit unterschiedlichem Inhalt in Spalte A
hab ich evt. noch irgendwo einen Überlegungsfehler ? oder muss ich dennoch irgendwas konkret anpassen ?
danke für deine Hilfe
selina

Anzeige
AW: Daten aus Files / Ordner lesen
13.01.2013 14:36:41
fcs
Hallo Selina,
ich das Makro mit deiner Musterdatei getestet.
Es werden beide Artikelnummern in der Liste ausgegeben.
Ich arbeite mit einer deutschen Office 2010 Version und deutschen Windows-Systemeinstellungen für Datum und Zahlen (Dezimalzeichen =",", 1000er-Zeichen = ".").
Es könnte sein, dass die Zellinhalte als Text interpretiert werden, wenn mit anderen Ländereinstellungen gearbeitet wird (z.B. US), da ein Zellinhalt mit 2 Punkten dann nicht mehr als Zahl=nummerisch erkannt wird.
Wenn oberhalb der Artikelnummern immer der Zellinhalt "Artikel" steht, dann kann man die Prüfung anpassen.
      Do While Trim(.Cells(Zeile_Q, 1).Text)  "Artikel"
'statt
Do While IsNumeric(.Cells(Zeile_Q, 1).Text))

Gruß
Franz

Anzeige
AW: Daten aus Files / Ordner lesen
13.01.2013 15:08:19
Selina
hallo Franz
das währe natürlich auch ne Möglichkeit, es mit deinem Vorschlag "Artikel" zu probieren.
mein Problem ist nur:
in den Dateien, welche in C:\Temp gespeichert sind, steht nicht immer oberhalb der Nummern das Wort "Artikel"
bei einigen Files steht oberhalb nichts. Bei anderen Files gibts oberhalb einen anderen Text.
Es gibt sogar Files, bei denen die Nummern ohne Punkte dazwischen geschrieben sind.
Gibt es evt. eine Möglichkeit, beim File-lese-Vorgang zuerst die ganze Spalte A als Numerisch zu konvertieren, alle allfällig vorhandenen Punkte und Texte zu löschen und nur noch die Zahlen auszugeben ?
ginge das irgendwie ?
so hätte ich jede Art von File per Makro berücksichtigt.

Anzeige
AW: Daten aus Files / Ordner lesen
13.01.2013 15:29:01
fcs
Hallo Selina,
grundsätzlich kann man in allen Inhalten der Zellen in Spalte A zuerst "." durch "" ersetzen und dann die Übertragungstarten.
In der Zieldatei kann man ja das Zahlformat für die Artikelnummern in der gewünschten Form darstellen.
Gruß
Franz
'Makro erstellt unter Excel 2010
Sub Hole_Nummern_aus_Dateien()
Dim varVerzeichnis As Variant
Dim strDatei As Variant
Dim wksZiel As Worksheet
Dim wbkQuelle As Workbook, wksQuelle As Worksheet
Dim Zeile_Z As Long
Dim Zeile_Q As Long, Zeile_Q1 As Long, Zeile_Q2 As Long
Dim icount As Integer
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Verzeichnis mit den Quell-Dateien auswählen"
.AllowMultiSelect = False
.InitialFileName = "C:\Temp"
If .Show = -1 Then
varVerzeichnis = .SelectedItems(1)
Else
Exit Sub
End If
End With
Set wksZiel = ActiveSheet 'Tabelle in die Nummern eingetragen werden sollen
With wksZiel
'letzte mit Dtaeneintrag in Splate A der Zieltabelle
Zeile_Z = .Cells(.Rows.Count, 1).End(xlUp).Row
.Columns(1).NumberFormat = "0"".""000"".""000"
End With
strDatei = Dir(varVerzeichnis & "\*.xls*")
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Do Until strDatei = ""
icount = icount + 1
Application.StatusBar = "Datei-Nr. " & icount & "  -  " & strDatei
'QuellDatei schreibgeschützt öffnen
Set wbkQuelle = Application.Workbooks.Open( _
Filename:=varVerzeichnis & "\" & strDatei, _
ReadOnly:=True)
Set wksQuelle = wbkQuelle.Worksheets(1)
With wksQuelle
'letzte Zeile in Spalte A = letzte Zeile mit einer Nummer
Zeile_Q2 = .Cells(.Rows.Count, 1).End(xlUp).Row
'In Spalte A alle "." in den Zellinhalten durch "nichts" ersetzen
For Zeile_Q = 1 To Zeile_Q2
With .Cells(Zeile_Q, 1)
.Value = VBA.Replace(.Text, ".", "")
End With
Next Zeile_Q
'1. Zeile mit einer Nummer ermitteln
Zeile_Q1 = Zeile_Q2
Zeile_Q = Zeile_Q1
'Zeilen rückwärts zählen und prüfen, ob Zelle in Spalte A nummerischen Inhalt hat
Do While IsNumeric(.Cells(Zeile_Q, 1).Text)
If Zeile_Q = 1 Then
Zeile_Q1 = 1
Exit Do
Else
Zeile_Q1 = Zeile_Q
End If
Zeile_Q = Zeile_Q - 1
Loop
'Nummern in Zieltabelle übertragen
For Zeile_Q = Zeile_Q1 To Zeile_Q2
Zeile_Z = Zeile_Z + 1
wksZiel.Cells(Zeile_Z, 1).Value = .Cells(Zeile_Q, 1).Value
Next
End With
'Quelldatei wieder schliessen
wbkQuelle.Close savechanges:=False
Set wbkQuelle = Nothing
Set wksQuelle = Nothing
strDatei = Dir
Loop
With Application
.StatusBar = False
.ScreenUpdating = True
.EnableEvents = True
End With
Set wksZiel = Nothing
MsgBox "Auslesen der Daten abgeschlossen"
End Sub

Anzeige
AW: Daten aus Files / Ordner lesen
13.01.2013 16:47:23
Selina
das tönt doch sehr gut
ich werde diese Lösung gleich mal in mein Projekt übernehmen und mal auf Herz und Nieren testen.
Danke dir schon mal herzlich für die Unterstützung

AW: Daten aus Files / Ordner lesen
13.01.2013 17:05:01
Selina
Wie ichs auch immer anstelle. Der Code liest mir keine Daten oder wenn... dann nicht alle ein.
vermutlich liegts auch daran, dass in einigen Files die Zahlen noch Formeln oder formatierungen hinten dran haben ?
da scheine ich es mit einem komplexen Unterfangen zu tun zu haben :-(

AW: Daten aus Files / Ordner lesen
14.01.2013 06:57:47
fcs
Hallo Selina,
evtl. eicht es ja, nur zu prüfen ob das 1. Zeichen eine Zahl ist.
      Do While IsNumeric(Left(Trim(.Cells(Zeile_Q, 1).Text), 1))

Falls das nicht funktioniert, dann muss man ggf. die Prüfungen umfangreicher aufbauen, um die vielen Varianten der Artikel-Nummern abzudecken.
Gruß
Franz

Anzeige
AW: Daten aus Files / Ordner lesen
14.01.2013 12:56:40
Selina
das wäre natürlich auch eine Möglichkeit. Die teste ich nun gleich aus.
Gruss Selina

AW: Daten aus Files / Ordner lesen
14.01.2013 14:27:25
Selina
Hallo Franz
es scheint, als ob wir nun wirklich einen grossen Schritt weitergekommen bin.
ich musste in meinem Code noch die folgende Zeile anpassen:
    Set wksQuelle = wbkQuelle.Worksheets(2)
und zwar musste hier beim Worksheet die Nummer 2 setzen. Die auszulesenden Daten sind immer auf dem 2. Tabellenblatt (das hatte ich leider bisher übersehen)
Zudem: das Tabellenblatt auf welchem die auszulesenden Nummern sind heisst in jedem File "Extern"
Leider aber gibt es einige wenige Files, bei denen genau eben dieses Tabellenblatt fehlt.
Hier sollte ich eine Möglichkeit haben, statt der Nummern - in der Ausgabezelle hinzuschreiben "Fehler" & Dateiname.
Ebenso gibt es Files, bei welchen das Tabellenblatt "Extern" zwar vorhanden ist, aber keine Nummern drauf enthalten sind.
Auch bei diesen Files sollte in der Ausgabezelle durch das Makro hingeschrieben werden: "Fehler" & Dateiname sowie "keine Nummern"
kann ich das leicht irgendwie noch ergänzen oder anpassen ?
das währe natürlich super
Selina

Anzeige
AW: Daten aus Files / Ordner lesen
15.01.2013 00:49:38
fcs
Hallo Selina,
kann ich das leicht irgendwie noch ergänzen oder anpassen ?
"Leicht" ist natürlich immer eine Frage des gewußt wie.
Wenn das auszulesenden Blatt immer den Namen "Extern" hat, dann kann man die Quelldatei nach dem Öffnen aus das Vorhandensein des Blatts prüfen. Hierfür hab ich die Function "fncCheckSheet" ergänzt. Außerdem kann man für das Setzen des Quellblattes dann den Namen verwenden statt der Index-Nummer des Tabellenregisters.
Ebenso hab ich eine Prüfung ergänzt, ob der Eintrag in der letzten datenzeile von Spalte A mit einer Ziffer beginnt.
Gruß
Franz
Textdatei mit agepasstem Code:
https://www.herber.de/bbs/user/83393.txt

Anzeige
AW: Daten aus Files / Ordner lesen
15.01.2013 14:23:27
Selina
Hallo Franz
herzlichen dank für deinen erneuten Hilfe-Code. leider hab ich noch nicht die nötige Zeit gefunden diesen mal gründlich auszustesten. werde dies aber sobald möglich natürlich tun.
Feedback poste ich liebend gerne dann.
in der Zwischenzeit: Vielen herzlichen Dank schon mal !
Selina

AW: Daten aus Files / Ordner lesen
15.01.2013 14:57:22
Selina
so!
der erste test auf die Schnelle ist erfolgreich gelaufen. Dein neuer Code macht genau was er soll. Wunderbar !
jetzt beginnt noch die "Feinkosmetik". Dh. die Dateien aus welchen die Nummern gelesen werden, weisen allesamt Verknüpfungen auf. Dies hat zur Folge, dass während dem Makrolauf ständig pro Datei ein Dialogfeld erscheint mit dem Hinweis: "Datei enthält Verknüpfungen" .... Ich muss dann jedesmal manuell auf "nicht aktualisieren" klicken.
kann ich das einbauen, dass die files ohne jegliche aktualisierung gelesen werden ? (Meldung unterdrücken)
Selina

Anzeige
AW: Daten aus Files / Ordner lesen
15.01.2013 17:05:57
fcs
Hallo Selina,
mit dem zusätzlichen Parameter sollte das Öffnen ohne Aktualisieren der Verknüpfungen erfolgen.
    Set wbkQuelle = Application.Workbooks.Open( _
Filename:=varVerzeichnis & "\" & strDatei, _
UpdateLinks:=0, _
ReadOnly:=True)

Bei UpdateLinks:=3 sollten die Verknüpfungen ohne Rückfrage aktualisiert werden. Allerdings könnte es sein, dass trotzdem Sicherheitsabfragen kommen, wenn die Datei in nicht vertrauswürdigen Verzeichnissen liegen.
Gruß
Franz

AW: Daten aus Files / Ordner lesen
16.01.2013 06:18:46
Selina
Guten Morgen Franz
ich habe nun die zusätzlichen Parameters noch eingefügt und auf UpdateLinks:=3 gesetzt. Das Ganze läuft soweit gut. Es erscheinen jetzt einfach pro File eine andre Meldung: "File enthält Verknüpfungen die nicht aktualisiert werden können" (dazu zwei Schaltflächen: Weiter und Verknüpfung bearbeiten)
evt. muss ich einen anderen Code bei UpdateLinks:=3 verwenden ?
ich teste das mal noch aus
Danke herzlich für die super Hilfe !
Selina

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige