Clever-Excel-Forum

Normale Version: Einlesen von Dateien in verschiedene Spalten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo, ich bin der neue hier  :43:
Ich stehe vor einem (für mich) großem Problem und hoffe mir kann hier jemand helfen dieses zu Lösen.

In einen Order werden automatisch Log Dateien geschrieben. Diese bestehen immer aus Datum, Start und Ende.
Hier ein Muster: "2015.12.15_16.12.48-16.13.02.log" 

Gibt es eine Möglichkeit das Excel, so lange es geöffnet ist, den Ordner "überwacht" und immer wenn ein File hinzu kommt dieses sortiert nach Tag in eine Spalte schreibt?

In Spalte A1-A100 werden dann alle Logs untereinander mit dem Datum "2015.12.15" aufgelistet, in Spalte B1-B100 die vom nächsten Tag und so weiter.

Ich bekomme das irgendwie nicht hin. Aktuell liste ich den gesamten Ordnerinhalt In Spalte A untereinander auf. Dies muss ich aber immer manuell machen. Des weiteren schränkt die unterschiedliche Anzahl der Logs pro Tag die automatische weiterverarbeitung sehr ein.

Hoffe hier hat jemand eine bessere Lösung für mich auf Lager.
Moin,

willst du die Daten wirklich nur umschichten, ohne die Chance zur Auswertung?
Ich würde erst einmal die protokollierten Daten in drei Spalten aufteilen, dann lässt sich damit auch etwas machen.
Danach Wäre vielleicht untereinander (ähnlich wie bisher) die bessere Lösung, denn dann kann per PivotTable hervorragend gefiltert und ausgewertet werden.
Den Import kannst du dann (täglich?) per VBA anstoßen und auch die Aufgliederung durchführen lassen.
Auswerten tue ich die Daten anschließend anhand von dem importierten Dateinamen, um den Inhalt der log Datei geht es mir nicht. Die Auswertung ist auch überhaupt nicht das Problem, die funktioniert wie gewollt. Ich bekomme es lediglich nicht hin die Daten automatisch zu importieren und in die einzelnen Spalten aufzuteilen.
Damit meine Auswertung funktioniert müssen die Dateinamen (komplett inkl. Endung) in Spalten Sortiert nach Datum aufgelistet sein. Aber am Automatischen (Falls automatisch nicht möglich, dann wenigstens per klick auf einen Button) auslesen des Verzeichnisses scheitert es aber bei mir.

Eine Verlinkung der aufgelisteten Dateien wäre noch das Sahnehäubchen wenn alles funktioniert. Aber das hätte keine Priorität.

EDIT: Die Daten weiterhin untereinander aufzulisten, ohne sie in verschiedene Spalten dach Datum zu trennen, wäre für mich suboptimal da es meine weitete Bearbeitung aufgrund der unterschiedlichen Anzahl der Log Files einschränken würde. Daher wäre mir eine automatische Trennung wichtig.
Ich hoffe, dass ich dich richtig verstanden habe:


Code:
Option Explicit

Sub LogFiles() 'By GMG-CC.de'
  Dim Anz As Integer
  Dim DateiName As String, Pfad As String
  Dim aDateiNamen() As String
  Dim lCol As Integer, Sp As Integer, Ze As Integer
  Dim Datum As Date, aDatum, DatumGefunden As Boolean
 
  Application.ScreenUpdating = False
  Pfad = "C:\Test\"
  DateiName = Dir(Pfad & "*.log")
  Do While Len(DateiName)
     If DateiName <> ThisWorkbook.Name Then
        Anz = Anz + 1
        ReDim Preserve aDateiNamen(1 To Anz)
        aDateiNamen(Anz) = DateiName
     End If
     DateiName = Dir
  Loop
 
  ActiveSheet.Cells.Clear
  For Ze = 1 To UBound(aDateiNamen)
     aDatum = Split(Left(aDateiNamen(Ze), 10), ".")
     Datum = DateSerial(aDatum(0), aDatum(1), aDatum(2))
     lCol = Cells(1, Columns.Count).End(xlToLeft).Column
     
     DatumGefunden = False
     For Sp = 1 To lCol
        If Cells(1, Sp) = Datum Then
           DatumGefunden = True
           Exit For
        End If
     Next Sp
     If DatumGefunden Then
        lrow = Cells(Rows.Count, Sp).End(xlUp).Row
        Cells(lrow + 1, Sp) = aDateiNamen(Ze)
     Else
        Cells(1, lCol + 1) = Datum
        Cells(2, lCol + 1) = aDateiNamen(Ze)
     End If
  Next Ze
 
  Columns(1).Delete
  Columns.AutoFit
  Application.ScreenUpdating = True
End Sub


Den Pfad musst du natürlich noch anpassen.
Vielen Dank schon mal für deine Unterstützung bei der Lösung meines Problems

Leider bekomme ich beim Ausführen eine Fehlermeldung mit verweis auf "lrow"

Code:
     If DatumGefunden Then
        lrow = Cells(Rows.Count, Sp).End(xlUp).Row
        Cells(lrow + 1, Sp) = aDateiNamen(Ze)
     


Excel meldet sich dann mit "Fehler beim Kompilieren" "Variable nicht definiert"

Hast du dafür eine Erklärung? Habe ich was vergessen?

EDIT: Habe die Variable am Anfang noch eingefügt. Jetzt bekomme ich einen "Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs" mit Bezug auf folgende Zeile:

Code:
For Ze = 1 To UBound(aDateiNamen)
Ja, ich habe irgendwie die vorletzte Testversion erwischt :@ 

Ersetze die DIM - Zeilen bitte mit diesen Zeilen, dann klappt es:


Code:
  Dim Anz As Integer
  Dim DateiName As String, Pfad As String
  Dim aDateiNamen() As String
  Dim lCol As Integer, Sp As Integer, Ze As Integer, lRow As Long
  Dim Datum As Date, aDatum, DatumGefunden As Boolean

Prinzipiell reicht es auch, wenn du , lRow As Long an einer beliebigen Stelle im Dim-Block schreibst.
Leider bekomme ich dann aber immer noch diesen Fehler:

(17.12.2015, 11:45)Reismann schrieb: [ -> ]EDIT: Habe die Variable am Anfang noch eingefügt. Jetzt bekomme ich einen "Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs" mit Bezug auf folgende Zeile:

Code:
For Ze = 1 To UBound(aDateiNamen)

EDIT: Lasse ich das "Option Explicit" am Anfang weg funktioniert es! Kann ich das weglassen? Oder benötige ich das für die korrekte Abarbeitung?
Huh Huh Huh 

Bei mir läuft's einwandfrei. Hier noch einmal der komplette Code (probiert):

Code:
Option Explicit

Sub LogFiles() 'By GMG-CC.de
  Dim Anz As Integer
  Dim DateiName As String, Pfad As String
  Dim aDateiNamen() As String
  Dim lCol As Integer, Sp As Integer, Ze As Integer, lRow As Long
  Dim Datum As Date, aDatum, DatumGefunden As Boolean
 
  Application.ScreenUpdating = False
  Pfad = "C:\Test\"
  DateiName = Dir(Pfad & "*.log")
  Do While Len(DateiName)
     If DateiName <> ThisWorkbook.Name Then
        Anz = Anz + 1
        ReDim Preserve aDateiNamen(1 To Anz)
        aDateiNamen(Anz) = DateiName
     End If
     DateiName = Dir
  Loop
 
  ActiveSheet.Cells.Clear
  For Ze = 1 To UBound(aDateiNamen)
     aDatum = Split(Left(aDateiNamen(Ze), 10), ".")
     Datum = DateSerial(aDatum(0), aDatum(1), aDatum(2))
     lCol = Cells(1, Columns.Count).End(xlToLeft).Column
     
     DatumGefunden = False
     For Sp = 1 To lCol
        If Cells(1, Sp) = Datum Then
           DatumGefunden = True
           Exit For
        End If
     Next Sp
     If DatumGefunden Then
        lRow = Cells(Rows.Count, Sp).End(xlUp).Row
        Cells(lRow + 1, Sp) = aDateiNamen(Ze)
     Else
        Cells(1, lCol + 1) = Datum
        Cells(2, lCol + 1) = aDateiNamen(Ze)
     End If
  Next Ze
 
  Columns(1).Delete
  Columns.AutoFit
  Application.ScreenUpdating = True
End Sub

Wenn er "meckert": Welchen Wert hat die Variable Anz? Und welchen Wert die Funktion UBound(aDateiNamen)? Jeweils markieren und ToolTip abwarten.
Hallo Reismann,

wie bekommst Du denn den Ordnerinhalt "manuell" nach Spalte A? Schreibst Du den Ordnerinhalt etwa ab oder hast Du da schon ein Makro?

Edit: Hab den Thread seit heute früh offen, die Frage geschrieben und etwas spät auf den Absenden-Button gedrückt Sad
Leicht OT:
@André:

Der Amerikaner sagt es sehr treffend: "Shit happens, all the time …" :19:
Seiten: 1 2