Recherche im Logfile (*.txt) - Excel-Ausgabe

Hallo,

alle Aktionen, die bei uns in der Arbeit mit einem speziellen Word-Makro durchgeführt werden, lasse ich mit TextStream in ein Logfile eintragen.

Dieses Logfile ist vor allem ein Nachweis für alle unsere Kollegen, dass sie gewisse Arbeiten durchgeführt haben. Jetzt kommt es manchmal zu Rückfragen, wenn z.B. eine Abteilung ein Mail nicht bekommen hat oder eine Datei verschwunden ist.

Das Logfile ist in etwa so aufgebaut:

Datum Zeit Rechnername Sachbearbeiter Aktion Zeichen Sonstiges

Toll wäre es jetzt, wenn ich mein bestehendes Word-VBA-Makro mit einer guten Suchfunktion aufpeppen könnte:

  • Volltextrecherche im Logfile
  • Suche in einer bestimmten „Spalte“ (natürlich gibt es in einem Textfile keine Spalten, aber anhand der Tabs könnte man die Suche ja vielleicht auf „simulierte Spalten“ einschränken)

Der Sinn der eingeschränkten Suche ergibt sich aus der Tatsache, dass zum Beispiel im unter Sonstiges einmal der Name einer Person aufgeführt ist, die den gleichen Namen eines Sachbearbeiters hat. Die Volltextrecherche liefert jetzt alle Ergebnisse. Brauchen täte ich aber nur Treffer, die nach dem dritten und vor dem vierten Tab liegen (siehe oben).

Wenn der gesuchte Begriff in einer Zeile gefunden wird, dann soll die komplette Zeile in eine neue Excel-Tabelle eingefügt werden.

Ich hab jetzt schon ziemlich lang im Internet rumgesucht und mit TextStream / ReadLine rumprobiert. Leider bin ich noch zu keiner geschickten Lösung gekommen. Aber vielleicht wißt ihr ja mehr…

MfG

Stefan

Hallo Stefan,

mit VBA kenne ich mich zwar nicht aus, dafuer aber ein wenig mit VB
Dort würde ich es wiefolgt loesen.
Musst mal schauen inwiefern es unter VBA geht.

Prüfen ob File da ist
Einlesen des Files in eine Variable
Text splitten in einzelne Felder
überprüfen anhand des suchmusters ob der die zeile einen Treffer liefert.

Wenn ja dann in Excel ausgeben. Frag mich aber nicht wie
Wenn nein -> Weiter in der naechsten zeile
File schliessen, volla da sollte es gewesen sein :smile:

Da ich nicht weiss, wie du den, ich sags ma so Tab in das Logfile geschrieben hast, denn den Wert brauchst du :s
Nehmen wir mal an er besteht aus 9 Leerzeichen!

So nun aber ma fix ein paar Zeile Code :smile:

option explicit

'Überprüfen ob File da ist
private function FileExists(sFile as String)
On Error Resume Next
 Const NotFile = vbDirectory Or vbVolume
 FileExists = (GetAttr(Path) And NotFile) = 0
On Error GoTo 0
end function

'File einlesen und daten in excel eintragen!
private sub ReadFile(sfile as string)
Dim ff As Byte
Dim sPuffer As String
Dim Tabulator As String \* 9
dim Suchspalte as byte
Dim vRet As Variant
 ff = FreeFile
 Tabulator = Space(9)
 Open "f:\test.dat" For Input As #ff
 Do While Not EOF(ff)
 Line Input #ff, sPuffer
 If Len(sPuffer) \> 0 Then vRet = Split(sPuffer, Tabulator)
 'Nehmen wir an der Name der geprüft werden soll
 'ist in der 4 Spalte und wir suchen alle die mit Her anfangen
 If IsEmpty(vRet) Then
 'Keine Daten mit dem trennzeichen Tabulator gefunden!
 'Dein Code
 Else
 If Ubound(vret)

Ist alle ungetestet, sollte aber eigentlich laufen. Sofern ich kein Tippfehler drin hab. Man achte auf die Zeit :s


> <small>[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]</small>

grad abgeschickt und schon den ersten Fehler gesehen :frowning:

Ich habe eine Variable Suchspalte declariert. Also in welche Spalte gesucht werden soll. Jedoch habe ich ihr kein Wert zugewiesen.
Schreibe mal noch unter die Zeilen

 ff = FreeFile
 Tabulator = Space(9)

einfach die Zeile

 ff = FreeFile
 Tabulator = Space(9)
 Suchspalte=3 ' Deine Spalte! Bedenke das Array beginnt bei 0 zu 
'zaehlen. Das heisst im File die 4 Spalte ist im Array dann die 3!

MfG Alex

Hallo,

warum lange programmieren, wenn Word die Funktionalitäten selbst schon enthält.
Man muss nur noch eine Möglichkeit finden, die Log-Datei in eine Worddatei zu überführen.
Mein Vorschlag:
zeilenweises einlesen und Ausgabe in ein per Code erzeugtes neues Worddokument
Umwandlung des Textformates in eine Tabelle (VBA-Function: ConvertToTable mit Trennzeichen TAB, sh. Word-VBA-Hilfe)

Nun kann man das Dokument mit dem Log in Tabellenform dem Nutzer selber zur Verfügung stellen, so dass er über die Boardmittel (Suche) die gesamte Tabelle oder auch einzelne markierte Spalten durchsuchen kann.
Eine andere Variante wäre, das Word-Log-Dokument auszublenden und die Funktionalitäten über eine Userform zur Verfügung zu stellen, die die entsprechenden Wordfunktionen per VBA (z.B. Find-Funktion) aufruft und die Ergebnisse ausgibt.

Gruß, tester

Hallo,

also das Logfile kann im Lauf der Zeit ziemlich umfangreich werden. Wenn man es in Word importiert, wird da eine ziemlich große Datei draus. Schließlich werden ja alle Formatierungen etc. gespeichert. Geschickter wäre es daher meiner Ansicht nach im relativ kleinen txt zu suchen und nur die wenigen Zeilen zu übernehmen, die tatsächlich zutreffend sind. Ob die Ausgabe dann in Word oder Excel erfolgt wäre nicht so wichtig - aber übersichtlicher wäre es meiner Meinung nach in Excel. Da kann man auch schneller mit den Daten weiterarbeiten.

Also die Möglichkeit alles in ein Word-Dokument einzulesen und anschließend im Word weiterzusuchen schließe ich daher aus Kapazitätsgründen mal aus.

Danke trotzdem für die Idee.

MfG

Stefaktiv

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

also ich hab den Code mal ins Makro eingefügt. An den Befehlen scheitert es nicht, aber so recht funktionieren will es auch nicht. Ich muss mich aber noch mal eingehender damit befassen, woran es liegen könnte…

Danke schon mal für die Antwort

Grüße

Stefan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Stefan,

da ich nicht den genauen des Files kenne und auch nicht weiss wo du dein Suchkriterium hernimmst, kann ich dir def. keine Lösung presentieren. Das was ich dir gepostet habe, ist nur als Denkstoss gedacht, wi du es machen kannst. Sicher musst du es noch deinen Beduerfnissen anpassen!

Aber allein der Code, sollte Fehlerfrei sein und anstandslos laufen :smile:

MfG Alex