Herbers Excel-Forum - das Archiv

Josef - Textfile einlesen - Nachtrag!

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Josef - Textfile einlesen - Nachtrag!
von: Karl-Heinz

Geschrieben am: 17.02.2005 08:58:17
Hallo Josef...
das file sieht aus wie unter:
https://www.herber.de/bbs/user/18223.txt
zu finden.
Im Block 1 findest man das Datum, im Block 2 meine eigene Nummer und in Block 3 und 4 die Nummer die ich angerufen habe. Kannst du mal schauen?
Vielen Dank
Bild

Betrifft: AW: Josef - Textfile einlesen - Nachtrag!
von: Josef Ehrensberger

Geschrieben am: 17.02.2005 10:43:46
Hallo Karl-Heinz!
Da der Aufbau des Textfiles komplett unterschiedlich ist, muss man
die Aufbereitung des String neu gestalten!
Sub sucheInTextFile2()
Dim x As Long, lRow As Long
Dim Zeilen() As String, FName As String, sText As String
Dim tmp As String, s1 As String, s2 As String, s3 As String
Dim n1 As Integer, n2 As Integer, n3 As Integer, n4 As Integer, iCnt As Integer
Dim arrS As Variant
'On Error GoTo ERRORHANDLER
'Datei auswählen
FName = Application.GetOpenFilename("Textl Dateien (*.txt)," & _
"*.txt")
If FName = "Falsch" Then Exit Sub
'Suchbegriff(e) eingeben
sText = InputBox("Bitte gesuchte Nummer Eingeben!" & vbLf & vbLf & _
"Mehrere Nummern durch "","" trennen!", _
"Suche", "0171") 'Suchtext
If sText = "" Then Exit Sub
'Suchbegriff von falscheingaben (",", ":", ".", " ") bereinigen
sText = Trim(Replace(Replace(Replace(Replace(sText, ";", ","), ".", ","), ":", ","), " ", ""))
'Suchbegriffe aufteilen
arrS = Split(sText, ",")
With Application
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
.Calculation = xlCalculationManual
'.Cursor = xlWait
End With
Range("A:C").ClearContents 'Datenbereich löschen
'Schleife über die Suchbegriffe
For iCnt = 0 To UBound(arrS)
'Die letzten beiden Parameter geben das linke und rechte
'Begrenzungszeichen einer Zeile an, dies können auch
'mehrere sein.
If FindTerm(FName, CStr(arrS(iCnt)), Zeilen, vbLf, vbLf) Then
'Scleife um die Fundstellen
For x = 0 To UBound(Zeilen) - 1
tmp = Trim(Zeilen(x))
Do While InStr(1, tmp, "  ") > 0
tmp = Trim(Replace(tmp, "  ", " "))
Loop
n1 = InStr(1, tmp, " ")                      'erste Leerstelle suchen
n2 = InStr(n1 + 1, tmp, " ")                 'zweite Leerstelle suchen
n3 = InStr(n2 + 1, tmp, " ")                 'dritte Leerstelle suchen
n4 = InStr(1, tmp, CStr(Year(Date))) - 1     'Jahreszahl suchen
s1 = Trim(Mid(tmp, n1, n2 - n1))                 'Anrufende Nummer
s2 = Trim(Mid(tmp, n2, n3 - n2))   'Angerufene Nummer
s3 = Mid(tmp, n4 + 1, 8)         'Datum
'Daten nur eintragen, wenn gesuchte Nummer in der
'angerufenen Nummer vorhanden
If InStr(1, s2, CStr(arrS(iCnt))) = 1 Then
lRow = lRow + 1
Cells(lRow, 1) = s1
Cells(lRow, 2) = s2
Cells(lRow, 3) = DateValue(Left(s3, 4) & "." & _
Mid(s3, 5, 2) & "." & Right(s3, 2))
End If
'End If
Next
End If
Next
If lRow > 0 Then
MsgBox "Es wurden " & lRow & " Zeilen gefunden!"
Else
MsgBox "Suchbegriff nicht vorhanden!"
End If
ERRORHANDLER:
Debug.Print Err.Number; Err.Description
With Application
.ScreenUpdating = True
.EnableEvents = True
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
.Cursor = xlDefault
End With
End Sub

Die Funktion "FindTerm" bleibt unverändert!
Bild

Betrifft: AW: Josef - Textfile einlesen - Nachtrag!
von: Karl-Heinz
Geschrieben am: 17.02.2005 11:48:22
Hallo Josef...
bekomme eine Fehlermeldung bei
s2 = Trim(Mid(tmp, n2, n3 - n2)) 'Angerufene Nummer
"ungültiger Prozeduraufruf oder ungültiges Argument" - liegt wohl daran dass n3 zu diesem Zeitpunkt null ist ?
Was meinst du?
Bild

Betrifft: AW: Josef - Textfile einlesen - Nachtrag!
von: Karl-Heinz
Geschrieben am: 17.02.2005 11:59:45
Hallo..
wenn ich die Länge des eingelesenen strings erhöhe kann ich auch noch ein Leerzeichen finden oder? Denke dass kein leerzeichen mehr kommt deswegen kann ich n3 nicht definieren?
grüsse
Bild

Betrifft: AW: Josef - Textfile einlesen - Nachtrag!
von: Josef Ehrensberger

Geschrieben am: 17.02.2005 12:02:04
Hallo Karl-Heinz!
Gut das du mitdenkst!
Ich habe gesagt das die Funktion "FindTerm" unverändert bleibt!
Da habe ich gelogen;-)
Änddere die Zeile
ZZ(UBound(ZZ)) = Left(Mid$(a, v, w - v), 100)

ab in
ZZ(UBound(ZZ)) = Mid$(a, v, w - v)

Sorry;-))
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
 Bild
Excel-Beispiele zum Thema "Josef - Textfile einlesen - Nachtrag!"
Tabellenblattnamen in ein Listenfeld einlesen Gefilterte Daten in eine ListBox einlesen
Einlesen von Zellinhalten in Variablen 1000 Arbeitsblätter aus 1000 Arbeitsmappen einlesen
Tabellenblattnamen in eine ListBox einlesen Text aus UserForm-Textbox in Variable einlesen
Blätter in ComboBox-Feld einlesen und auswählen Dateinamen in Tabelle einlesen
Namen einer Arbeitsmappe einlesen