Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Suchen und Ersetzen, alle ersetzen, mit Variable in Schleife, VBA

848 views
Skip to first unread message

Markus Bärlocher

unread,
Dec 26, 2005, 4:17:31 AM12/26/05
to

Nochmals: Frohe Weihnachten!

warum funktioniert das nicht:

For i = 0 To 12 ' Generationen
suchen = "^p" & Str(i) & "^t^t"
ersetzen = "^p" & Str(i + 1) & "^t"
' MsgBox suchen + " " + ersetzen + " " + Str(i)
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = suchen
.Replacement.Text = ersetzen '2. Generation, etc...
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next i

Habe stundenlang erfolglos verscheidene Varianten versucht.
Vermute, da ist was mit der Variblen falsch...
denn DAS funktioniert:

Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p7^t^t"
.Replacement.Text = "^p8^t" '8. Generation
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll

Herzlichen Dank!
Markus

klaus.schmitz

unread,
Dec 26, 2005, 6:28:55 AM12/26/05
to
Hallo Markus,

mit Deinem Code kann ich so nichts anfangen,
weil ich ja nicht weiß was Du eigentlich machen
willst.

Wenn Du testen willst, ob mit den Variablen
alles in Ordnung ist,

dann schreibe in Dein Modul zunächst einmal
oben hin Option Explicit,
denn dann meldet sich Excel ganz selbständig
wenn es einen Schreibfehler geben sollte.

Ansonsten schreibe mal, was Du machen willst
und dann wird man sehen.

MfG
Klaus

Uli Jahn

unread,
Dec 26, 2005, 6:35:18 AM12/26/05
to
Hallo Markus,

richtig verstanden habe ich´s auch nicht.
Wenn es aber um suchen und ersetzten geht könntest Du es so versuchen:

Sub test()


For i = 0 To 12

Sheets(1).Activate
Selection.Replace What:="^p" & Str(i) & "^t^t", Replacement:="^p" &
Str(i + 1) & "^t", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next
End Sub


viele Grüße
Uli

"Markus Bärlocher" <Markus.B...@lau-net.de> schrieb im Newsbeitrag
news:1135588651.1...@o13g2000cwo.googlegroups.com...

Wolfgang Habernoll

unread,
Dec 26, 2005, 7:06:04 AM12/26/05
to
Hallo Markus


"Markus Bärlocher" <Markus.B...@lau-net.de> schrieb im Newsbeitrag
news:1135588651.1...@o13g2000cwo.googlegroups.com...
>
> Nochmals: Frohe Weihnachten!

danke gleichfalls

> warum funktioniert das nicht:

es handelt sich doch um ein WORD-Makro. In Excel gehen doch wohl *beide*
nicht da der Makro Code dieser Anwendungen nicht identisch ist. Hier der
gleiche Rat, zeichne mal 'Ersetzen' in Excel mit dem Makrorekorder auf und
du siehst den Unterschied.

mfG
Wolfgang Habernoll

Markus Bärlocher

unread,
Dec 26, 2005, 7:18:53 AM12/26/05
to
Hallo Klaus,

danke für den Tip:
>Option Explicit

Jetzt sind alle Variablen deklariert.
Leider ohne Erfolg für die gewünschten Ergebnisse.

Ich habe eine Word-Datei, die ich in Excel verarbeiten will.
Dazu mache ich aus den Daten der Word-Datei eine Tabelle.
Die Word-Zeilen trenne ich anhand von <Tab>s in Spalten.

Vorher muss ich eine zusätzliche Spalte berechnen:
Jede Zeile beginnt mit einer Anzahl führender <Tab>s.

Beispiel:
Peter Müller (Grossvater)
<Tab>Franz Müller (Vater)
<Tab><Tab>Rolf Müller (Sohn)
<Tab><Tab><Tab>Johann Müller (Enkel)

Ich zähle also die führenden Tabs und schreibe die Stufe der
Generation an den Zeilenanfang und lösche die überflüssigen <Tab>s:

1<Tab>Peter Müller (Grossvater)
2<Tab>Franz Müller (Vater)
3<Tab>Rolf Müller (Sohn)
4<Tab>Johann Müller (Enkel)

Der "Trick" von Dietmar geht so:
> Vor die erste Zeile ein Return (^p) setzen.
> Dann ersetzen: Return (^p) durch Return und 2x TAB (^p^t^t).
> Jetzt die Returns + doppelten Tabs durch "Return 1 TAB" (^p1^t),
> die dreifachen durch eine 2 & TAB usw. Dann hast du die Generationen-Nummern.

das geht ausgezeichnet mit folgendem Code:

Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst 'Cursor nach
oben
Selection.TypeParagraph 'leere Zeile einfügen (^p)

Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p"
.Replacement.Text = "^p0^t^t"


.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll

Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p0^t^t"
.Replacement.Text = "^p1^t" '1. Generation


.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll

Da ich 12 Generationen habe, wiederhole ich den letzen Block 12 mal...

Deshalb die Idee mit der Schleife:

Dim i
Dim suchen
Dim ersetzen

Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst 'Cursor nach
oben
Selection.TypeParagraph 'leere Zeile einfügen (^p)

Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p"
.Replacement.Text = "^p0^t^t"


.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll

For i = 0 To 5 'Generationen


suchen = "^p" & Str(i) & "^t^t"
ersetzen = "^p" & Str(i + 1) & "^t"
' MsgBox suchen + " " + ersetzen + " " + Str(i)
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = suchen
.Replacement.Text = ersetzen '2. Generation, etc...
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next i

End Sub

Die Variabeln (i, suchen, ersetzen) haben (soweit erkennbar) dieselben
Inhalte wie ohne Schleife. Aber die Schleife "tut" ansonsten nichts...

ist das so verständlich?

Mit herzlichem Gruss,
Markus

Markus Bärlocher

unread,
Dec 26, 2005, 7:32:09 AM12/26/05
to
Hallo Wolfgang,

> zeichne mal 'Ersetzen' in Excel mit dem Makrorekorder auf
> und du siehst den Unterschied.

uff - ich bin davon ausgegangen dass VBA für alle Office-Anwendungen
identisch ist...

Ja, ich habe das Makro in Word geschrieben und dort getestet.
Und wenn es läuft, wollte ich es nach Excel rüberkopieren und von
hier aus starten (zusammen mir all den andern Routinen)...

Das Problem ist, dass ich in Word die Zeilen bisher nicht in eine
Tabelle bekomme, ohne dabei die jeder Zeile vorangehenden führenden
<Tab>s zu verlieren (und in deren Anzahl steckt die Information für
eine benötigte Spalte). Details s. Posting Nr.3

Mit herzlichem Gruss,
Markus

Thomas Ramel

unread,
Dec 26, 2005, 8:19:26 AM12/26/05
to
Grüezi Markus

Markus Bärlocher schrieb am 26.12.2005

>> zeichne mal 'Ersetzen' in Excel mit dem Makrorekorder auf
>> und du siehst den Unterschied.
>
> uff - ich bin davon ausgegangen dass VBA für alle Office-Anwendungen
> identisch ist...

Der Teil 'VB' ist in allen Applikationen derselbe; er bezihet sich auf die
Sprache 'Visual Basic' - das 'A' jedochmacht den Unterschied; es steht für
'Application'.

Da jede Applikation andere Objekte hat (Word z.B. kennt nicht den 'Range'
aus Excel' und Excel kennt nicht die ^t/^p als Tabulator oder
Absatztrenner) ist die Anwendung in jeder Applikation unterschiedlich und
nicht jeder Code läuft auch in einer anderen Applikation.

Mit freundlichen Grüssen
Thomas Ramel

--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)

Markus Bärlocher

unread,
Dec 26, 2005, 8:40:40 AM12/26/05
to
Danke Thomas für Deine Erklärung!

heisst das:
1. von Excel aus in Word "rumzufummeln" macht keinen (nie) Sinn?
2. ich mache diesen Teil also in Word mit einem Word-VBA?
3. ich stelle die Frage nochmal im entsprechenden Word-Forum?

Mit herzlichem Gruss,
Markus

Helmut Weber

unread,
Dec 26, 2005, 8:41:58 AM12/26/05
to
Hallo Markus,

schick mir doch mal Dein Word-Dokument und die Vorlage,
wenn die Makros nicht im Dok selbst sind.

Ganz unverbindlich, natürlich.
Wenn ich was weiß, wirst Du von mir hören.

Was ich bisher an Word-Code zu Deinem Thema gesehen habe,
ist noch optimieringsfähig, mit Bitte um Verzeihung
an die Autoren, natürlich ist meistens noch was zu verbessern,
und wer später in einen Thread einsteigt, tut sich leichter,
na klar.

--
Gruß

Helmut Weber, MVP WordVBA

"red.sys" & chr$(64) & "t-online.de"
Win XP, Office 2003


Helmut Weber

unread,
Dec 26, 2005, 8:51:02 AM12/26/05
to
Hallo Markus,

Du kannst Word aus Excel steuern und Excel aus Word steuern.

Aber Du kannst "Word-Suchen" nicht für Excel verwenden,
und "Excel-Suchen" nicht für Word verwenden.

Du kannst Excel-Befehle aus Word an Excel senden,
vereinfacht gesagt,
und Du kannst Word-Befehle aus Excel an Word senden.

Aber es bleiben immer die Befehle der jeweiligen Anwendung,
von übergreifenden "Sachen" die in gemeinsamen Bibliotheken
vorliegen, mal abgesehen.


--
Gruß

Helmut Weber, MVP WordVBA

"red.sys" & chr$(64) & "t-online.de"
Win XP, Office 2003

0 new messages