Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
916to920
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
916to920
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Werte aus mehreren Dateien auslesen
23.10.2007 12:38:38
Sebastian
Hallo liebe Experten!
Kann mir jemand bei meinem folgenden Problem helfen:
Ich bekomme täglich per Mail einen Geschäftsbericht als Excel-Datei zugesandt. Diese archiviere ich und lege sie in einem Ordner ab. Der Dateiname beginnt immer mit DAT, dann folgt das Datum. Für heute heißt die Datei beispielsweise DAT20071023.xls. Mich interessiert nur ein einziger Wert aus dem Geschäftsbericht, dieser steht IMMER in der Zelle C18. Ich möchte mir nun die Arbeit ersparen, den Wert täglich herauszukopieren. Daher suche ich nach einer Möglichkeit, dies über ein Makro automatisch zu tun. Als Resultat möchte ich ein Tabellenblatt mit einer Auflistung der Werte nach Datum erhalten. Also in der ersten Spalte das Datum und in der zweiten Spalte der dazughörige Wert, der in der Ursprungsdatei in Zelle C18 steht. Es sollen dabei alle Dateien in meinem Ordner einbezogen werden.
Weiss jemand eine Möglichkeit wie das funktionieren könnte?
Vielen Dank im Voraus!
Gruß,
Sebastian

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte aus mehreren Dateien auslesen
23.10.2007 13:25:06
Thomas
Hallo,
hier ein Beispiel wie es gehen könnte. Ich habe es an einer einfachen Tabelle getestet. Weise dem Makro eine Tastenkombination zu und führe es aus.

Sub sammelDaten()
Application.ScreenUpdating = False
Dim dasJahr As Integer, derMonat As Integer, derTag As Integer
Set datxls = Application.FileSearch
With datxls
.LookIn = ThisWorkbook.Path & "\Ordner1" 'anpassen
.SearchSubFolders = True
.FileType = msoFileTypeExcelWorkbooks
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
openfile = .FoundFiles(i)
Dim Bereich As Range
Set Bereich = Range("C18")
Workbooks.Open openfile
Bereich.Value = Range("C18").Value
Application.DisplayAlerts = False
ActiveWorkbook.Close savechanges:=False
Application.DisplayAlerts = True
DatumSplitt = Right(Left(openfile, Len(openfile) - 4), 8)
dasJahr = Left(DatumSplitt, 4)
derMonat = Left(Right(DatumSplitt, 4), 2)
derTag = Left(DatumSplitt, 2)
[A1].Select
If Not ActiveCell = "" Then ActiveCell.Offset(1, 0).Select
ActiveCell = DateValue(derTag & "." & derMonat & "." & dasJahr)
ActiveCell.Offset(0, 1) = [C18]
[C18] = ""
Next i
Else
MsgBox "Keine Datei vorhanden."
End If
End With
Application.ScreenUpdating = True
End Sub


Antwort ob es klappt wäre nett.
Gruß Thomas

Anzeige
AW: Werte aus mehreren Dateien auslesen
23.10.2007 14:17:11
Sebastian
Hallo Thomas!
Zunächst einmal vielen Dank für deine Bemühungen. Irgendwo hakt es bei aber mir leider noch.
Ich bin folgendermaßen vorgegangen:
1. Ich habe eine neue Excel-Datei im betreffenden Verzeichnis erstellt und einen Button darauf eingefügt. (Ich würde zum Auslösen gerne einen Button anstelle einer Tastenkombination verwenden. Müsste doch grundsätzlich möglich sein, oder?) Ich habe dann dein sub kopiert und eingefügt.
2. Wenn ich die Prozedur aus dem VB-Editor heraus mit F5 starte kommt folgende Fehlermeldung:
Fehler beim Kompilieren! Variable nicht definiert. Dabei ist in folgender Zeile der Bereich "datxls =" markiert:
Set datxls = Application.FileSearch
Wo ist der Fehler?
Vielen Dank im Voraus für deine Hilfe und besten Gruß,
Sebastian

Anzeige
AW: Werte aus mehreren Dateien auslesen
23.10.2007 15:41:13
Thomas
Das geht auch aus einem Button. Der Code im button muß dann
Call sammelDaten
heißen.
das Makro sammelDaten() muß dann in einem Modul liegen. Ein Fehler ist aber drin, [A1].select darf da nicht stehen, sonst wird immer die nachfolgende Zelle überschrieben.
Versuche das Makro so einzugeben, hoffe das klappt dann. Bei mir gehts problemlos.
Modul1:

Sub sammelDaten()
Application.ScreenUpdating = False
Dim dasJahr As Integer, derMonat As Integer, derTag As Integer
[A1].Select
With Application.FileSearch
.LookIn = ThisWorkbook.Path & "\Ordner1" 'anpassen
.SearchSubFolders = True
.FileType = msoFileTypeExcelWorkbooks
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
openfile = .FoundFiles(i)
Dim Bereich As Range
Set Bereich = Range("C18")
Workbooks.Open openfile
Bereich.Value = Range("C18").Value
Application.DisplayAlerts = False
ActiveWorkbook.Close savechanges:=False
Application.DisplayAlerts = True
DatumSplitt = Right(Left(openfile, Len(openfile) - 4), 8)
dasJahr = Left(DatumSplitt, 4)
derMonat = Left(Right(DatumSplitt, 4), 2)
derTag = Left(DatumSplitt, 2)
If Not ActiveCell = "" Then ActiveCell.Offset(1, 0).Select
ActiveCell = DateValue(derTag & "." & derMonat & "." & dasJahr)
ActiveCell.Offset(0, 1) = [C18]
[C18] = ""
Next i
Else
MsgBox "Keine Datei vorhanden."
End If
End With
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Werte aus mehreren Dateien auslesen
23.10.2007 15:44:58
Thomas
Oh je...da hab ich nicht aufgepasst.
derTag = Left(DatumSplitt, 2)
muss heißen
derTag = Right(DatumSplitt, 2)
Sonst ist der Tag immer der 20. ;o)

AW: Werte aus mehreren Dateien auslesen
23.10.2007 16:02:45
Sebastian
Hallo Thomas!
Habe deine Sub in ein Modul eingefügt und den Button so wie du es beschrieben hast als Auslöser verwendet. Beim Drücken des Buttons springt er auch in die gewünschte Prozedur rein.
1. Diesmal meckert er, weil Variable i nicht definiert ist. Wo und wie mache ich das?
2. EIne Sache habe ich auch nicht ganz verstanden, und zwar sagtest du, dass [A1].select da nicht stehen dürfe. Anschließend steht es aber in deinem sub. Soll der Teil in meinem Fall in die Prozedur rein oder nicht?
Vielen Dank für deine Bemühungen und ich hoffe du siehst mir nach, dass ich (noch) so wenig Kenntnisse auf dem Gebiet habe. Dass das Ganze bei dir schon klappt, stimmt mich jedenfalls schon einmal ziemlich froh!! ;-)
Gruß, Sebastian

Anzeige
AW: Werte aus mehreren Dateien auslesen
23.10.2007 16:14:00
Thomas
Also [A1].select muß schon drin sein, um sicher zu stellen, dass die Eintragungen in der Zelle A1 beginnen, allerdings war die Stelle in dem Makro falsch. Mich wundert das mit der Variable...scheibe in die Zeile
Dim dasJahr as Integer ..... noch
, i as Integer dazu. hoffe dann läuft es bei dir.
Ich muß jetz zum Training und bin früestens ab 19 Uhr wieder da. Hoffe aber das jetz alles gehen wird.
Bis dann, Thomas

AW: Werte aus mehreren Dateien auslesen
23.10.2007 16:38:00
Sebastian
Hallo Thomas!
Das ganze geht jetzt schon weiter, allerdings hakt es nun an der Stelle:
openfile = .FoundFiles(i)
Es wird die Fehlermeldung "Variable nicht definiert" angezeigt und dabei ist der Teil "openfile =" markiert.
Hoffentlich weißt du was da los ist!?
Bis dahin erst mal viel Spaß bei deinem Training und ich hoffe du kannst mir weiterhin helfen,
Gruß,
Sebastian

Anzeige
AW: Werte aus mehreren Dateien auslesen
23.10.2007 18:40:00
Thomas
Ja, jetz wirds mir auch klar. Bei mir kommen zwar keine Fehler, aber dein Excel scheint da etwas genauer zu sein. Die Variable openfile mit string definieren. Dann würde der nächste Fehler bei DatumSplitt kommen...Also trage den Anfang des Makros so ein:
Sub sammelDaten()
Application.ScreenUpdating = False
Dim dasJahr As Integer, derMonat As Integer, derTag As Integer, i As Integer
Dim openfile As String, DatumSplitt As String
...
den Rest so beslassen.
Sorry das es nich gleich so geklappt hat bei dir, aber ich bin auch noch kein Experte in VBA, wurschtel mich so durch und komme dafür schon recht gut zurecht.
Hoffe jetzt klappt alles.

Anzeige
AW: Werte aus mehreren Dateien auslesen
23.10.2007 19:23:00
Sebastian
Hi Thomas!
Das ganze macht schon gute Fortschritte. Die Prozedur kommt ins Rollen und schreibt den Wert der ersten Datei in mein Excel-Sheet. Danach kommt allerdings folgender Fehler:
Laufzeitfehler 13: Typen unverträglich
Wenn ich auf "Debuggen" klicke wird folgende Zeile markiert:
ActiveCell = DateValue(derTag & "." & derMonat & "." & dasJahr)
Eine Idee woran das liegen könnte? (Habe ich etwa eine andere Excel oder VBA-Version als du?)
Gruß

AW: Werte aus mehreren Dateien auslesen
23.10.2007 19:57:00
Thomas
Tja, also das mit den Variablen ist ok, man könnte sagen unsauber programmiert. Hätte ich die Variablen von Anfang an sauber definiert, wären die Fehler nicht gekommen. Das mit dem DateValue...tja, weiß nich wieso es bei mir geht, bei dir aber nicht. Typen unverträglich sagt aus, das ein Wert erwartet wird, aber ein Text erhalten wird (in diesem Fall denk ich das so). Da müßte ich auch erstmal Hilfe erhalten. Aber ich habe eine Lösung. Schreibe die Zeile so um:
ActiveCell = derTag & "." & derMonat & "." & dasJahr
Dann wird aber das Datum als Text in die Zelle geschrieben. Wenn dir das reicht, du also mit dem Datum nicht weiter rechnen willst, dann kannst das so übernehmen. Ansonsten bin ich da erstmal überfragt.
Sollte ein User mit VBA Level gut dabei sein, vielleicht kann er mir und Sebastian das ja mal erklären. Wäre net.
Alternativ probiere es auch mal so:
ActiveCell = DateValue(Format(derTag & "." & derMonat & "." & dasJahr, "dd.mm.yyyy"))
Das klappt natürlich bei mir wieder problemlos. Würde mich interessieren ob es bei dir auch geht und das Datum dann auch ein Datum in der Zelle ist. Wenns nicht geht, dann wie oben...

Anzeige
AW: Werte aus mehreren Dateien auslesen
23.10.2007 20:19:00
Sebastian
Wow also mit der ersten Möglichkeit klappt es. Ich muß zwar später mit den Werten weiterrechnen, aber dieses Problem kann ja folgendermaßen gelöst werden, indem ich die Spalte einfach nach Durchlauf deiner Prozedur umformatiere, also in meinem Button:

Private Sub CmdStartEinlesen_Click()
Call sammelDaten
Columns("A:A").Select
Selection.NumberFormat = "m/d/yyyy"
End Sub


Bei der zweiten Lösung kommt bei mir wieder der Typen-Unverträglichkeits-Fehler.
Aber mit der ersten klappt das ganze so wie ich mir das vorgestellt habe.
Eine kleiner Bug ist mir allerdings gerade noch aufgefallen:
Wenn ich meinen Button das zweite Mal drücke, dann erscheint der erste Eintrag doppelt. Ich habe im Moment drei Dateien, den 31/7/2007, 31/8/2007, 30/9/2007. Der Eintrag für den 31/07/2007 (=kleinster bzw. erster Wert) kommt nach dem zweiten Durchlauf der Prozedur also doppelt vor.
Hast du eine Idee woran das liegen könnte bzw. wie man das abstellen könnte?
Vielen Dank schon mal ich bin echt beeindruckt!!!
Gruß,
Sebastian

Anzeige
AW: Werte aus mehreren Dateien auslesen
23.10.2007 20:29:46
Thomas
Ja das kannst erreichen indem du die erste Zelle erst leerst. Das kannst mit [A1]="" machen. Einfach an dem Anfang vom Code des Commandbutton stellen.
Das nachträgliche Umwandeln in das Datumsformat ist natürlich ne super Lösung! Schön das es jetzt funktioniert.

AW: Werte aus mehreren Dateien auslesen
23.10.2007 20:40:20
Sebastian
Ja so klappt es! Der Hammer das spart mir wirklich jede Menge Arbeit. Also tausend Dank für deine nette Hilfe!
Beste Grüße,
Sebastian

AW: Werte aus mehreren Dateien auslesen
23.10.2007 20:44:05
Thomas
Gerne doch und freud mich auch mal geholfen zu haben...sonst wird mir ja auch hier ganz super geholfen.
Schönen Abend noch, Tschüß Thomas

AW: Werte aus mehreren Dateien auslesen
24.10.2007 13:03:00
Sebastian
Hallo Thomas!
Falls du noch mal kurz Zeit hättest, es hat sich irgendwo ein kleiner Bug eingeschlichen, und ich bin nicht von selbst drauf gekommen, woran das liegt. Die Fehlerbeschreibung ist wie folgt:
1. Bei der Auflistung der Daten sind teilweise Werte falsch. Nach Durchlauf der Prozedur erhalte ich zur Zeit:
16/7/2007
17/7/2007
18/7/2007
19/7/2007
20/7/2007
23/7/2007
24/7/2007
25/7/2007
26/7/2007
30/7/2007
31/7/2007
08/01/2007
08/02/2007
08/03/2007
08/06/2007
08/07/2007
08/08/2007
08/09/2007
08/10/2007

14/8/2007
15/8/2007
16/8/2007
17/8/2007
20/8/2007
21/8/2007
22/8/2007
23/8/2007
24/8/2007
27/8/2007
28/8/2007
29/8/2007
30/8/2007
31/8/2007
09/03/2007
09/04/2007
09/06/2007
09/07/2007
09/11/2007
09/12/2007

14/9/2007
18/9/2007
19/9/2007
20/9/2007
21/9/2007
24/9/2007
25/9/2007
26/9/2007
27/9/2007
30/9/2007
10/01/2007
10/02/2007
10/05/2007
10/08/2007
10/09/2007
10/10/2007
10/11/2007
10/12/2007

15/10/2007
16/10/2007
18/10/2007
19/10/2007
22/10/2007
23/10/2007
Bei den fettgedruckten Werten sind Tag und Monat vertauscht, es müsste also beispielsweise richtigerweise statt dem 08/01/2007 der 01/08/2007 ausgespuckt werden.
Mir ist aufgefallen, dass er diesen "Dreher" immer nach dem Ende des letzten Monats drin hat. Also nach dem 31/07, 31/08, 30/09 usw.
Außerdem ist mir aufgefallen, dass bei den richtigen Werten die Monate einstellig sind, bei den falschen hingegen eine 0 dabei steht. (Also z.b. Format "03/09" statt Format "31/7")
Das Format ist mir eigentlich egal, aber vielleicht hilft das ja bei der Identifikation des Fehlers. Wäre super dankbar für eine Hilfe.
P.S: Die angepasste Routine sieht im Moment so aus:

Sub sammelDaten()
Application.ScreenUpdating = False
Dim dasJahr As Integer, derMonat As Integer, derTag As Integer, i As Integer
Dim openfile As String, DatumSplitt As String
[A18].Select
With Application.FileSearch
.LookIn = ThisWorkbook.Path & "\TAP" 'ggf. anpassen
.SearchSubFolders = True
.FileType = msoFileTypeExcelWorkbooks
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
openfile = .FoundFiles(i)
Dim Bereich As Range
Set Bereich = Range("F41")
Workbooks.Open openfile
Sheets("Aus_Preis").Select
Bereich.Value = Range("F41").Value
Application.DisplayAlerts = False
ActiveWorkbook.Close savechanges:=False
Application.DisplayAlerts = True
DatumSplitt = Right(Left(openfile, Len(openfile) - 4), 8)
dasJahr = Left(DatumSplitt, 4)
derMonat = Left(Right(DatumSplitt, 4), 2)
derTag = Right(DatumSplitt, 2)
If Not ActiveCell = "" Then ActiveCell.Offset(1, 0).Select
ActiveCell = derTag & "/" & derMonat & "/" & dasJahr
ActiveCell.Offset(0, 1) = [F41]
[F41] = ""
Next i
Else
MsgBox "Keine Datei vorhanden."
End If
End With
Application.ScreenUpdating = True
End Sub


Vielen Dank und beste Grüße,
Sebastian

Anzeige
AW: Werte aus mehreren Dateien auslesen
25.10.2007 08:11:32
Thomas
Hallo Sebastian.
Klar kann ich versuchen weiter zu helfen. Dazu aber erstmal Fragen. Du hast geschrieben:
"Für heute heißt die Datei beispielsweise DAT20071023.xls"
Daher ging ich davon aus das die Dateien immer 11-stellig bezeichnet sind. Kann es sein das einstellige Tage/Monate auch einstellig in der Dateibezeichnung sind? Also DAT2007101.xls? Ist es Möglich das die Bezeichnung Tag/Monat manchmal verdreht ist?
Das Makro geht immer von 11 Stellen und der Reihenfolge JJJJMMTT aus.
Steht das aktuelle Datum der Datei nur im Dateinamen oder auch in der Datei selbst, wenn ja auch immer an der selben Stelle wie der benötigte Wert aus F41? Dann könnte man das Datum auch direkt aus der Datei auslesen und kann sich das Aufteilen des Dateinamens sparen.
Gruß Thomas

AW: Werte aus mehreren Dateien auslesen
25.10.2007 19:54:00
Sebastian
Hallo Thomas!
Nein die Dateien sind wirklich immer zu 100% identisch.
Ich habe aber mittlerweile gesehen, dass das ganze nicht an deiner VBA-Routine lag, sondern an dem, was Excel durch das Umformatieren daraus gemacht hat. Ich habe das ganze jetzt so gelöst: Ich habe die ausgegebenen Datumszellen im Textformat belassen und habe dann in einer zusätzlichen Hilfsspalte den Datumswert mit der Excel-Formel =value() umformatiert. Zugegeben sehr unschön aber ich weiß nicht wie ich es sonst machen soll. Leider klappt ja seltsamerweise die Formel datevalue() bei dir in VBA, bei mir jedoch nicht :-( Zum Weiterrechnen reicht es mir jedoch momentan.
Eine weitere Sache ist mir allerdings auch noch aufgefallen: In deiner Routine wird am Ende im Ausgabeblatt immer noch in Zelle C18 etwas reingeschrieben, was du dann später mit [C18] ="" wieder eliminierst. Gibt es dafür noch eine andere Möglichkeit? (Ich möchte nämlich gerne später in Spalte C noch weiterrechnen, was derzeit nicht geht, da dort immer wieder etwas überschrieben wird).
In diesem Sinne besten Gruß,
Sebastian

AW: Werte aus mehreren Dateien auslesen
25.10.2007 21:31:57
Thomas
Hallo Sebastian.
Die Zelle C18 hast du doch schon (ausgehend von deinem geposteten script) schon nach F41 verschoben. Du kannst natürlich dort jede beliebige Zelle wählen, die dich nicht stört. Alternativ könnte man das ganze auch in eine Variable packen, dann wird in deinem Ausgabeblatt auch nichts mehr reingeschrieben. Das Script würde dann so aussehen:

Sub sammelDaten()
Application.ScreenUpdating = False
Dim dasJahr As Integer, derMonat As Integer, derTag As Integer, i As Integer
Dim openfile As String, DatumSplitt As String, Auslesen As String
[A18].Select
With Application.FileSearch
.LookIn = ThisWorkbook.Path & "\TAP" 'ggf. anpassen
.SearchSubFolders = True
.FileType = msoFileTypeExcelWorkbooks
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
openfile = .FoundFiles(i)
Workbooks.Open openfile
Auslesen = Sheets("Aus_Preis").[F41] 'hier die Zelle die Ausgelesen werden soll
Application.DisplayAlerts = False
ActiveWorkbook.Close savechanges:=False
Application.DisplayAlerts = True
DatumSplitt = Right(Left(openfile, Len(openfile) - 4), 8)
dasJahr = Left(DatumSplitt, 4)
derMonat = Left(Right(DatumSplitt, 4), 2)
derTag = Right(DatumSplitt, 2)
If Not ActiveCell = "" Then ActiveCell.Offset(1, 0).Select
ActiveCell = derTag & "/" & derMonat & "/" & dasJahr
ActiveCell.Offset(0, 1) = Auslesen
Next i
Else
MsgBox "Keine Datei vorhanden."
End If
End With
Application.ScreenUpdating = True
End Sub


Gruß Thomas

AW: Werte aus mehreren Dateien auslesen
26.10.2007 18:36:25
Thomas
Hallo Sebastian,
ist das Problem jetzt gelöst? Der Beitrag ist schon recht weit in der Liste und da schau ich dann nich mehr so oft nach.
Gruß Thomas

222 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige