Discussion:
Text in vielen Tabellen ersetzen
(zu alt für eine Antwort)
Frieda Beyer
2009-09-21 12:50:20 UTC
Permalink
Hallo NGler,

ich habe hier ein immer wieder neu zu erstellendes Word-Dokument mit
jeweils unterschiedlich vielen zum Teil gleichartigen Tabellen.

Ich möchte jetzt alle Tabellen mit einer Schleife durchlaufen und immer
dann, wenn in der ersten Zelle (erste Reihe, erste Spalte) der Text
"Mein Text" steht, soll in der gleichen Zeile (= oberste Zeile) in den
anderen Spalten das Wort "MeinWort" durch "NeuesWort"ersetzt werden.
Nicht in jeder Zelle der obersten Reihe ist MeinWort zu finden.

Leider passiert bei meinem folgenden Versuch nichts, ich wäre für Tipps
dankbar!

Sub TextInErsterZeileErsetzen()

For Each tbl In ActiveDocument.Tables
If tbl.Rows(1).Cells(1).Range.Text = "Mein Text" Then
tbl.Rows(1).Select
With Selection.Find
.Text = "MeinWort"
.Replacement.Text = "NeuesWort"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End If
Next tbl
End Sub


Gruß, Frieda
Thomas Gahler
2009-09-21 18:48:13 UTC
Permalink
Hallo Frida
Post by Frieda Beyer
Leider passiert bei meinem folgenden Versuch nichts, ich wäre für Tipps
dankbar!
Kann sein, dass es nur an den beiden ehlenden Zeilen liegt
.ClearFormatting
.Replacement.ClearFormatting
Die sollten immer dabei sein, wenn mit dem .Find-Objekt gearbeitet wird.
Aber auch sonst verhält sich diese Objekt manchmal störisch....

Verrsuche es mal mit diesen Zeilen



' --------- --------- --------- --------- ---------
Sub Demo()
Dim tbl As Word.Table
Dim rng As Word.Range

For Each tbl In ActiveDocument.Tables
If InStr(1, tbl.Cell(1, 1).Range.Text, "Mein Text", vbBinaryCompare)
<> 0 Then
Set rng = tbl.Rows(1).Range

SuchenErsetzen _
strSuche:="Mein Wort", _
strErsetzen:="Neues Wort", _
rngBereich:=rng

End If
Next tbl
End Sub

Private Sub SuchenErsetzen( _
ByVal strSuche As String, _
ByVal strErsetzen As String, _
ByVal rngBereich As Word.Range)

With rngBereich.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = strSuche
.Replacement.Text = strErsetzen
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Sub
' --------- --------- --------- --------- ---------
--
Thomas Gahler
MVP für Word
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows Vista (SP2), Office 2007 (SP1)
Frieda Beyer
2009-09-21 20:16:14 UTC
Permalink
Danke Thomas!

Damit klappt das schon wunderbar!

Das kann ich auch an einer anderen Stelle noch verwenden. Hier muss ich
jedoch "MeinWort" durch einen manuellen Zeilenumbruch+MeinWort ersetzen.
Das restliche Szenario ist gleich. Könntest du mir den dafür veränderten
Code auch noch posten? Wäre klasse!

Gruß, Frieda
unknown
2009-09-22 09:34:34 UTC
Permalink
Post by Frieda Beyer
Danke Thomas!
Damit klappt das schon wunderbar!
Das kann ich auch an einer anderen Stelle noch verwenden. Hier muss ich
jedoch "MeinWort" durch einen manuellen Zeilenumbruch+MeinWort ersetzen.
Das restliche Szenario ist gleich. Könntest du mir den dafür veränderten
Code auch noch posten? Wäre klasse!
Gruß, Frieda
vbCr & "MeinWort" bzw. vbLf & "MeinWort" tun nicht?
--
Eric March

Kenne die Vergangenheit. In der Unwissenheit über die Vergangenheit
liegt das Verderben der Zukunft.
"Die Geschichte ist der beste Lehrmeister - mit den unaufmerksamsten
Schülern." Indira Gandhi
Frieda Beyer
2009-09-22 12:14:21 UTC
Permalink
Post by unknown
vbCr & "MeinWort" bzw. vbLf & "MeinWort" tun nicht?
Nein, leider nicht. Da taucht dann nur ein Quadrat vor dem Wort auf.

Gruß, Frieda
Thomas Gahler
2009-09-24 05:14:54 UTC
Permalink
Hallo Frieda
Post by Frieda Beyer
Das kann ich auch an einer anderen Stelle noch verwenden. Hier muss ich
jedoch "MeinWort" durch einen manuellen Zeilenumbruch+MeinWort ersetzen.
Das restliche Szenario ist gleich. Könntest du mir den dafür veränderten
Code auch noch posten?
Nichts einfacher als das, wenn man das richtige Zeichen kennt ;-)

Die Zeilenschaltung ist Chr$(11) oder als Konstante vbVerticalTab. Also
sieht der Aufruf der Prozedur dann so aus.

SuchenErsetzen _
strSuche:="Mein Wort", _
strErsetzen:=Chr$(11) & "Mein Wort", _
rngBereich:=rng


Die beiden Zeichen, die Eric genannt hat, sind zwar nett gemeint, doch
leider nicht die passenden. vbCr (13) oder vbLf (10) oder auch vbCrLf(13+10)
lösen inerhalb von Word immer eine Absatzschaltung (¶) aus. Welches der drei
Zeichen zum EInsatz kommt hat wohl nur dann einen EInfluss, wenn Dateien
mittels Open direkt geöffnet und beschrieben werden. Vor allem wenn die
Datei dann in weitere System transferiert werden, da muss der Programmier
wissen wie die Datei aufgabeut ist.
--
Thomas Gahler
MVP für Word
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP3), Office XP (SP3)
Frieda Beyer
2009-09-24 15:18:56 UTC
Permalink
Jetzt klappt es bestens!
Herzlichen Dank an Eric und Thomas!

Gruß, Frieda

Loading...