Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Einlesen von Dateien in verschiedene Spalten
#1
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.
Antworten Top
#2
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.
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top
#3
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.
Antworten Top
#4
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.
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top
#5
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)
Antworten Top
#6
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.
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top
#7
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?
Antworten Top
#8
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.
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top
#9
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#10
Leicht OT:
@André:

Der Amerikaner sagt es sehr treffend: "Shit happens, all the time …" :19:
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top


Gehe zu:


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