Aus einer Datenbank werden Daten nach Excel per Makro gelesen.
Die Zeit wurden nun durch zehntel,hunderdestel und tausendestel erweitert.
Das Probelm ist, die Zeit ist unterscheidlich lang.
Beipiel aus der Datenbank:
06.06.2008 19:30:39.196;D213FF1C000104E0
06.06.2008 19:30:41.69;7E37FF1C000104E0
06.06.2008 19:30:41.79;8536FF1C000104E0
06.06.2008 19:29:32.560;EA47FF1C000104E0
und wird daher nicht richtig eingelesen.
Makro
Dim DateiPos As Long
Dim zeile As Integer
Dim datei As String
Sub AusTextDatei()
DateiPos = 0
zeile = 0
datei = Application.GetOpenFilename("TagRegEx.dat,*.dat")
Cells(1, 1) = 1
LeseAbPos
End Sub
Sub LeseAbPos()
Dim Zeilenoffset As Integer
Dim strTxt As String
Dim FileLen As Long
If Cells(1, 1) 1 Then
Exit Sub
End If
Zeilenoffset = 2 'erste beiden Zeilen für die Überschriften
Open datei For Input As #1
Seek #1, DateiPos + 1
FileLen = LOF(1)
' Nur zur Information
'Cells(1, 2) = FileLen
'Cells(1, 3) = DateiPos
Do Until DateiPos >= FileLen
' in zeile wird die aktuelle Zeilennummer als
' globale Variable zwischen den Aufrufen gespeichert!
zeile = zeile + 1
' Zeile Einlesen
Line Input #1, strTxt
' Verarbeiten und das nächste mal nach den gelesenen Zeilen weiterlesen
' Hinter jeder Zeile folgen 2 Zeichen Zeilentrenner!
DateiPos = DateiPos + 2 + VerarbeiteZeile(strTxt, zeile + Zeilenoffset)
Loop
Cells(1, 4) = zeile
Close #1
'MsgBox "Habe die Daten ausgelesen!"
' wieder aufufen nach .. Sekunden
Application.OnTime Now + TimeValue("00:00:01"), "LeseAbPos"
End Sub
' Rückgabe: Länge der eingelesenen Zeile
Function VerarbeiteZeile(strZeile As String, intAktRow As Integer) As Integer
Dim iCol As Integer
iCol = 1
' Erwartet wird ein Ausdruck, der von den Zeichenpositionen genau so aufgebaut ist:
' Länge einer Zeile muss 36 sein!!
Dim ZeilenLänge As Integer
ZeilenLänge = 40
VerarbeiteZeile = 0
Cells(intAktRow, iCol) = zeile
iCol = iCol + 1
If Len(strZeile) ZeilenLänge Then
Cells(intAktRow, iCol) = "Fehler: " + strZeile
VerarbeiteZeile = Len(strZeile)
Exit Function
End If
Cells(intAktRow, iCol) = Left(strZeile, 10)
Cells(intAktRow, iCol + 1) = Mid(strZeile, 12, 12) ' hier ist glaube ich das Problem. Die länge ist
' unterschiedlich
Cells(intAktRow, iCol + 2) = Mid(strZeile, 25, 16)
VerarbeiteZeile = ZeilenLänge
End Function
Public Sub StopEinlesen()
Cells(1, 1) = 0
End Sub
Vielen Dank für eure Hilfe!
Gruß
Rolf