Makro: best. Zeilen in *.txt entfernen

Hallo,
ich möchte folgendes automatisieren:
eine txt-Datei laden, nach bestimmten Zeilen (jedesmal die gleichen) suchen und diese löschen. Ich denke dass geht mit einem Makro, nur kenn ich mich damnit nicht aus.
txt sieht in etwa so aus:
0000152637840000Avalprovision000000230,00
0000853615750000 Stoffe 000015425,00
0000402015400000 Gehalt 000001478,00
0000426457460000 tatam 000055647,00
0000625475580000 diersdas 000014778,00
Es soll beispielsweise immer die Zeile mit 042645746 (tatam) gelöscht werden.

Weiss jemand Rat?
Alex

Hi, Alexander!

das geht über Bearbeiten | Ersetzen. Gibst bei Suchen ein: 042645746 (tatam) und bei Ersetzen einen Leeranschlag z. B.

Du kannst Dir die Chose natürlich auch aufzeichnen. Dann hast Du ein Makro, das Du immer wieder einsetzen kannst, wenn exakt diese Änderungen häufiger vorgenommen werden müssen.

Viel Erfolg und einen schönen Donnerstag
Desirée

Mich irritiert ein wenig der Betreff, denn gerade entdecke ich, dass Du als Extension von .txt redest - vielleicht nicht WinWord? Bei DOS-WORD seinerzeit ging es aber schon ähnlich!

ich möchte folgendes automatisieren:
eine txt-Datei laden, nach bestimmten Zeilen (jedesmal die
gleichen) suchen und diese löschen. Ich denke dass geht mit
einem Makro, nur kenn ich mich damnit nicht aus.
txt sieht in etwa so aus:
0000152637840000Avalprovision000000230,00
0000853615750000 Stoffe 000015425,00
0000402015400000 Gehalt 000001478,00
0000426457460000 tatam 000055647,00
0000625475580000 diersdas 000014778,00
Es soll beispielsweise immer die Zeile mit 042645746 (tatam)
gelöscht werden.

Weiss jemand Rat?
Alex

Desirée

Mich irritiert ein wenig der Betreff, denn gerade entdecke
ich, dass Du als Extension von .txt redest - vielleicht nicht
WinWord? Bei DOS-WORD seinerzeit ging es aber schon ähnlich!

Schon Win-Word, aber ich krieg als Ursprung eine txt-Datei von unseren Kaufleuten, die mit den Änderungen weiterverwendet wird und dachte mir, so etwas lässt sich am besten in Word automatisieren, sind etwa 20 Datensätze im Monat, etwas ausführlicher als das Beispiel und mit einem Makro spart man Zeit und es kann nichts falsches gelöscht werden.

Hi Alex,

wenn Du die Dateien in WinWord öffnen kannst, dann kannst Du auch wie vorgeschlagen vorgehen, aber zusätzlich Aufzeichnen eines Makros, weil es ja immer wieder vorkommt. Brauchst nur den Makro-Rekorder mitlaufen zu lassen, wenn Du die eben erwähnten Schritte vollziehst. Du kannst natürlich noch weitere anschließende Suchen- und Ersetzen-Aktionen gleichzeitig aufnehmen, so dass Du nur ein Makro hast (vorausgesetzt für alle Doks gelten auch wirklich die gleichen Bedingungen!) Ich würde aber alles vorsichtshalber mit einer Kopie eines solchen Doks machen - auch den anschließenden Test. Wenn alles bestens funktioniert und nichts Falsches gelöscht wird, kannst Du es jeden Monat wieder getrost einsetzen!

Ich wünsche Dir viel Erfolg
einen schönen Donnerstag und ein schönes Wochenende!
Desirée

Solltest Du noch Fragen haben, dann melde Dich einfach noch mal. Vielleicht kennst Du Dich mit Makro-Aufzeichnen ja noch nicht aus. Andererseits möchte ich hier nicht Dir womöglich längst Bekanntes posten!

Solltest Du noch Fragen haben, dann melde Dich einfach noch
mal. Vielleicht kennst Du Dich mit Makro-Aufzeichnen ja noch
nicht aus. Andererseits möchte ich hier nicht Dir womöglich
längst Bekanntes posten!

Danke für die schnelle Antwort. Werds mal ausprobieren. Ganz unbeddarft bin ich nich, hab vor längerem mal mit Excel-Makros rumgespielt.
Alex

Hi, Alexander!

das geht über Bearbeiten | Ersetzen. Gibst bei
Suchen ein: 042645746 (tatam) und bei Ersetzen einen
Leeranschlag z. B.

Damit wird aber nicht eine ganze Zeile gelöscht. Das Makro sieht prinzipiell so aus:

Selection.Find.ClearFormatting
With Selection.Find
.Text = „zahl“
.Replacement.Text = „“
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.HomeKey Unit:=wdLine
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Delete Unit:=wdCharacter, Count:=1

(dieses Makro kannst du sehr leicht selbst aufzeichnen. Gehe auf extras - makro aufzeichnen. Nach den Formalitäten klickst du Bearbeiten - Suchen. Dort gibst du z. B. tamtam ein und klickst auf weitersuchen. Danach gehst du aus diesem Menü raus und drückst der Reihe nach: Pos1, Umschalter + Ende, Entf

Fertig. )

Mein Problem ist, dass ich nicht weiß, wie man dieses Makro so lange wiederholen kann, bis eben kein „zahl“ mehr gefunden wird. Daduch löscht dieses Makro, wenn es dieses Wort nicht findet, dennoch die oberste Zeile.
Die Sache ist sehr einfach. Wenn man weiß wie’s geht.

Schöne Grüße

Siegfried

Du kannst Dir die Chose natürlich auch aufzeichnen. Dann hast
Du ein Makro, das Du immer wieder einsetzen kannst, wenn exakt
diese Änderungen häufiger vorgenommen werden müssen.

Viel Erfolg und einen schönen Donnerstag
Desirée

Mich irritiert ein wenig der Betreff, denn gerade entdecke
ich, dass Du als Extension von .txt redest - vielleicht nicht
WinWord? Bei DOS-WORD seinerzeit ging es aber schon ähnlich!

ich möchte folgendes automatisieren:
eine txt-Datei laden, nach bestimmten Zeilen (jedesmal die
gleichen) suchen und diese löschen. Ich denke dass geht mit
einem Makro, nur kenn ich mich damnit nicht aus.
txt sieht in etwa so aus:
0000152637840000Avalprovision000000230,00
0000853615750000 Stoffe 000015425,00
0000402015400000 Gehalt 000001478,00
0000426457460000 tatam 000055647,00
0000625475580000 diersdas 000014778,00
Es soll beispielsweise immer die Zeile mit 042645746 (tatam)
gelöscht werden.

Weiss jemand Rat?
Alex

Pardon war unaufmerksam!Ganze Zeile wird nicht
gelöscht - bei meinem Vorschlag! Richtig lesen müsste man können, aber ich war einfach davon ausgegangen, dass das in einer Zeile steht - sozusagen ohne Kontext.

Danke für den Hinweis! Man führt ja ungern in die Irre!

Viele Grüße
Desirée

VBA-Code für Wiederholung bis Suchen erfolglos
Moin!

Um das Problem zu lösen, benötigt man meines Erachtens den VBA-Code für eine Wiederholung bis „Suchen“ nach „blabla“ nichts mehr findet. Kann jemand damit dienen? Würde mich persönlich nämlich auch weiterbringen. :smile:

Schöne Grüße
Siegfried

Kein Problem
Hi,
du kriegst also eine reine Textdatei, z.B.: april.txt.
Schreibe dir eine beliebigerName.bat, stelle sie ins gleiche Verzeichnis wie die april.txt und rufe sie dort auf.
Inhalt der Dos-Batch-Datei:

ren april.txt april.xxx
type april.xxx | find /v „tatam“ > april.txt
del april.xxx

Gruß
olala

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

Hallo allerseits

Eine Schleife kann in etwa wie folgt aussehen (angenommen, es soll nach der Zeichenfolge tamtam gesucht werden). Das Beispiel berücksichtigt den Hauptteil des Dokumentes:

With ActiveDocument.Range.Find
.ClearFormatting
.Text = „tamtam“
.Execute
While .Found = True
MsgBox „Hurra schon wieder ein Treffer!“
.Execute
Wend
End With

Im nächsten Beispiel sollen alle Zeilen, welche die Zeichenfolge tamtam enthalten gelöscht werden. Dazu ist zu sagen, dass die Fragestellung unglücklich ist, der Begriff Zeile ist nämlich bezogen auf MS Word überhaupt nicht eindeutig:

Verwechselbare Begriffe in MS Word
http://mypage.bluewin.ch/reprobst/WordFAQ/Begriffe.h…

Nun also präziser:

Alle Absätze , welche die Zeichenfolge tamtam enthalten, sollen gelöscht werden:

With ActiveDocument.Range.Find
.ClearFormatting
.Text = „tamtam“
.Exexute
While .Found = True
.Parent.Paragraphs(1).Range.Delete
.Execute
Wend
End With

Etwas ungeschickter, sollten diese sogenannten „Zeilen“ nicht mit einer Absatzmarke, sondern mit einer manuellen Zeilenumschaltung enden. Dann könnte der Code etwa wie folgt aussehen:

With ActiveDocument.Range.Find
.ClearFormatting
.Text = „tamtam“
.Execute
While .Found = True
.Parent.Bookmarks("\Line").Range.Delete
.Execute
Wend
End With

Weitere Beispiele zum Find -Objekt finden sich unter:
http://mypage.bluewin.ch/reprobst/WordFAQ/Range.htm#…

Im Gegensatz zu den Beispielen hier, sind die Beispiele im Skript getestet. Ich kann jetzt nicht testen, da ich hier unter Linux arbeite und MS Office nicht unter Linux läuft.

Das Ganze wäre allerdings auch ohne Find-Objekt zu lösen, nämlich in dem man die Sammlung aller Absätze durchgeht, wenn es sich dann um Absätze handelt.

Etwas anders, wenn die Zeilen auf einem manuellen Zeilenunbruch enden. Das Objekt Zeile gibt es gar nicht im Word-Objekt-Modell und somit auch keine Sammlung, welche man aberbeiten kann. Allerdings gibt es eine Umgehung dazu.

Der Umgang mit Zeilen und Absätzen ist Thema des folgendesn Skriptest:

http://mypage.bluewin.ch/reprobst/WordFAQ/ZS.htm

Gruss
Silvia Widmer

Zeilen löschen - jetzt klappts
Danke für die Hinweise, Silvia! Auch wenn dein Mini-Makro Word mehrach zum Absturz brachte - offenbar ist die Schleife, so wie du sie dargestellt hast, endlos.

Zeilen löschen ist aber meines Erachtens doch auch nicht so schwierig. Mit dem Code
Selection.HomeKey Unit:=wdLine
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Delete Unit:=wdCharacter, Count:=1

kann man zum Beispiel die augenblicklich aktive Zeile löschen.

Aber mit deiner Bedingung „if found = false“ habe ich nun das Makro fertigstellen können: (Blöderweise muss man es zweimal ausführen, aber dann klappt es auch. Bitte nicht fragen, warum)

Sub zeilen_mit_DM_loeschen()

Dim ausfuehren As Integer

ausfuehren = 1

Do

Selection.Find.ClearFormatting
With Selection.Find
.Text = „DM“
.Replacement.Text = „“
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False

If .Found = False Then ausfuehren = 0

End With

Selection.Find.Execute

If ausfuehren = 1 Then
Selection.HomeKey Unit:=wdLine
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Delete Unit:=wdCharacter, Count:=1
End If
Loop Until ausfuehren = 0

End Sub

Danke
Danke allerseits für eure Mühe, jetzt sollts klappen. Lob noch an Silvia, gute Links, hab ich gleich gebookmarked.
Grüße Alexander