MS Word ganze Zeilen ersetzen

  • #1
C

capi

Neues Mitglied
Themenersteller
Dabei seit
08.03.2005
Beiträge
4
Reaktionspunkte
0
Hallo,

ich quäle mich schon seit längerem damit ganze Zeilen bei Word ersetzen zu lassen.
Wenn die Buchstabenkombination .htm am Ende der Zeile gefunden wird, soll die ganze Zeile gelöscht werden und nicht nur das .htm
H
abe auch schon mit ersetze *.htm versucht, dann löscht er aber auch die Zeilen davor.

Wäre für einen Lösungsvorschlag sehr dankbar!

Capi
 
  • #2
Ola,

das geht nur mit Trick. Du hast nicht alles geschrieben, also nehem ich an: Word 200x, Mit Zeile meinst Du einen Absatz.

Erster Schritt
suche ^p ersetze durch ^p#

Im Ergebnis hast du an jedem Anfang eines Absatzes eine Raute

Dann machst Du das, was du schon versucht hast, nur das du nicht nach *.htm sonden nach #*.htm suchst und wieder durch die Raute ersetzt
Dann sollten in allen gelöschten Zeilen noch eine Raute stehen, die anderen haben immer noch die Rauten am Anfang
Achtung: Suche nac Platzhalterzeichen wieder ausschalten

Nächster Schritt:
suche #^p ersetzte durch nix

Abschließender Schritt
Suche nach # ersetze durch nix
 
  • #3
Hi zusammen,

hab das Gewünschte mal in einen Makro gegossen.

Gruß Matjes :)
Code:
Sub PunkthtmAmZeilenende_ZeileLoeschen()
  Dim myRange As Range, b_found As Boolean, l_start As Long

  Set myRange = ActiveDocument.Content
 ->myRange.Select
  l_start = myRange.Start
  
  
  Do
   ->Bereich setzen, in dem noch nicht gesucht wurde
    myRange.SetRange Start:=l_start, End:=myRange.End
    myRange.Select
    Selection.Find.ClearFormatting
    Selection.Find.Text = .htm
    b_found = Selection.Find.Execute
    
   ->wenn nichts gefunden wurde -> ENDE
    If Not b_found Then Exit Do
    
   ->nächstes Zeichen untersuchen
    Selection.Collapse wdCollapseEnd
    Selection.Expand wdCharacter
  
   ->Fortsetzungzeilenende ? (chr(11))
    If Mid(Selection.Text, 1, 1) = Chr(11) Then
     ->Zeile markieren
      Selection.Expand wdLine
     ->Start nächster Suchbereich auf Zeilenanfang setzen
      l_start = Selection.Start
      Selection.Delete
   ->Zeilenende ? (chr(13))
    ElseIf Mid(Selection.Text, 1, 1) = Chr(13) Then
     ->Zeilenende ? (chr(13))
      Selection.Expand wdLine
     ->Start nächster Suchbereich auf Zeilenanfang setzen
      l_start = Selection.Start
      Selection.Delete
    Else
     ->kein Zeilenende -> nicht löschen
     ->Start nächster Suchbereich hinter die Fundstelle setzen
      l_start = Selection.Start
    End If
  Loop
  
 ->aufräumen
  Set myRange = Nothing
End Sub
 
  • #4
Vielen Dank für die Antworten!!!

Ich werde es mal gleich nach PCDjoe`s Methode ausprobieren, leider ist die Liste so verdammt lang, dass ich befürchte mein Rechner würde dafür einige Tage brauchen, es sei denn ich splitte die Datei.

Leider weiss ich auch noch nicht wie man ein Makro erfolgreich einsetzt, vielleicht gibt es da ein FAQ oder wieder eine nette Erklärung ;)
 
  • #5
Hallo capi,

du kannst folgendermassen vorgehen:

1) Word-Datei öffnen
2) VB-Editor öffnen Alt+F11
Links siehst Du ein Fenster mit der Überschrift Projekt-VBA-Project.
In diesem Fenster ist das Document unter dem Namen VBAProject(Dateiname) zu finden.

3) VBA-Modul anlegen mit
3a) VBAProject(Dateiname) mit der Maus selektieren
3b) rechte Maustaste -> Einfügen -> Modul
in der Mitte geht das Code-Fenster Dateiname-Modul1(Code) auf

4) den gesamten Code per copy und Paste in dieses Fenster hineinkopieren
5) VB-Editor schliessen mit Alt+Q
6) mit Alt+F8 Makro PunkthtmAmZeilenende_ZeileLoeschen aufrufen

Gruß Matjes  :)
 
  • #6
Beide Methoden funktionieren hervorragend, die von Matjes ist aufgrund meiner riesigen Liste natürlich viel CPU schonender, leider aber nicht so flexibel ohne Programmierkentnisse :)

Kann man den Script so modifizieren, dass er alle Zeilen löscht welche am Ende kein
.de/
dranstehen haben?
 
  • #7
Hi capi,

folgender Makro erledigt das Gewünschte.

Gruß Matjes  ;)
Code:
Sub WennAmZeilenendeNichtSuchbegriff_ZeilenLoeschen()
  Const c_Suchbegriff = .de/
  
  Dim l_anz As Long
 ->Schreibmarke an den Anfang
  ActiveDocument.Range(Start:=0, End:=0).Select
  Selection.Expand wdLine
  
  Do
    If Right(Selection.Text, Len(c_Suchbegriff & Chr(11))) = _
          c_Suchbegriff & Chr(11) Then
     ->Suchbegriff mit Fortsetzungszeilenende ->
     ->nicht löschen, nächsten Satz markieren
      l_anz = Selection.Move(Unit:=wdLine, Count:=1)
     ->nächste Zeile vorhanden? ja: Zeile markieren nein:Ende
      If l_anz = 1 Then Selection.Expand wdLine Else Exit Do
    ElseIf Right(Selection.Text, Len(c_Suchbegriff & Chr(13))) = _
            c_Suchbegriff & Chr(13) Then
     ->Suchbegriff mit Zeilenende ->
     ->nicht löschen, nächsten Satz markieren
      l_anz = Selection.Move(Unit:=wdLine, Count:=1)
     ->nächste Zeile vorhanden? ja: Zeile markieren nein:Ende
      If l_anz = 1 Then Selection.Expand wdLine Else Exit Do
    Else
     ->Wenn die letzte Zeile selektiert ist
      If Selection.End = ActiveDocument.Range.End Then
       ->Zeile löschen und ENDE
        Selection.Delete
        Exit Do
      Else
       ->sonst
       ->Zeile löschen und nächste Zeile markieren
        Selection.Delete
        Selection.Expand wdLine
      End If
    End If
  Loop
End Sub
 
  • #8
Vielen Danke !

Hat wirklich super funktioniert!!! :D
 
Thema:

MS Word ganze Zeilen ersetzen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.836
Beiträge
707.957
Mitglieder
51.488
Neuestes Mitglied
elkhse
Oben