Hallo Leserinnen und Leser,
wie ich Balu bereits mitteilte habe ich den zuvor geposteten Code
überarbeitet und gleich zum Ausprobieren in eine Datei gepackt.
Getestet habe ich den Code unter LO 6.0.4.2 und AOO 4.1.5.
Hinweis:
Ich habe den Code nur in kleineren Dokumenten ausprobiert.
Es kann bei umfangreicheren Dokumenten sein, das die Ausführung
zu stoppen scheint. Diese liegt dann daran, dass die Schleife zum Suchen und Ersetzen mehrfach
durchlaufen wird. Also entsprechend zeitaufwendig ist.
Nur Geduld und eine zuvor gespeicherte Sicherungskopie kann auch nicht schaden!
Was kann dieser Code:
- Er sucht innerhalb eines markierten Textbereiches nach Treffern, welche in einem im Code angegeben Sucharray (mFind) gespeichert sind. Im Beispielcode sind es die Buchstaben A, B, C, D
Es wird zwischen Groß- und Kleinschreibung unterschieden. Möchte man dieses abstellen, dann muss im Suchobjekt (oFandR) der Befehl .SearchCaseSensitive=True, auf .SearchCaseSensitive=False gesetzt werden:
Codeausschnitt zur Objektvariablen oFandR:
Code: Alles auswählen
With oFandR
.SearchString = mFind(nRayCount) ' Suchstring per Übergabe aus Such-Array (mFind)
.ReplaceString = mReplace(nRayCount) ' Ersetzungsstring per Übergabe aus Ersetzungs-Array (mReplace)
.SearchWords = false' Wörter suchen, NEIN
.SearchCaseSensitive=True ' Unterscheidung Groß- und Kleinschreibung = True
End With
Wurde ein Treffer gefunden, wird dieser durch den Inhalt des „Ersetzungs-Arrays“ (mReplace) ersetzt. Im Beispielcode sind es die Ziffern 1,2,3,4.
Daraus folgt, dass die Großbuchstaben wie folgt ersetzt werden:
A → 1
B → 2
C → 3
D → 4
Das Such-Array, als auch das Ersetzungs-Array können beliebig erweitert werden. Es ist aber darauf zu achten, dass beide Array die gleiche Anzahl von Feldern enthalten. Die Zählung der Felder beginnt immer bei 0.
mFind(0) = „A“
mReplace(0)=“1“
mFind(1) = „B“
mReplace(1)=“2“
Feld 0 wird mit Inhalt von Feld 0 ersetzt.
Feld 1 wird mit Inhalt von Feld 1 ersetzt.
usw.
Dieses ergibt sich aus dem Schleifendurchlauf im Code.
- Sollte einmal kein Textbereich markiert sein, erfolgt eine Abfrage in Form einer Messagebox (OK/ Abbrechen). Hier gibt es dann die Möglichkeit zu entscheiden, ob die Ersetzung auf das gesamten Dokument angewendet werden soll.
OK = Es wird im gesamten Dokument gesucht und ersetzt
ABBRECHEN= Das Programm wird beendet
Alles weitere ist den Kommentaren im Code zu entnehmen.
@Balu
Balu hat geschrieben:Aber für Anfänger in der Programmierung ist sie schon eine große Hilfe, weil sie einem dazu zwingt mehr sorgfallt in die Programmierung zu legen.
a) Nun, ein Anfänger bin ich nicht, aber ich lerne gerne dazu.
b) Quick 'n dirty kann jeder. Doch spätesten wenn man mit Dialoge und über mehrere Module hinweg arbeitet, dann
ist Sorgfalt, selbstredende Variablen, korrekte Deklaration, usw. nahezu zwingend erforderlich. Oder man ist ein Supergenie
in Sachen Programmierung. Ein Genie bin ich nicht, sondern Autodidakt und ich weiß mir zu helfen.
Z.B.
Das Thema "Option Explicit" wird immer wieder diskutiert. Aus meiner Sicht soll es jeder so halten wie er es möchte.
Es ist zwar nervig wenn bei Ausführung immer wieder eine Fehlermeldung aufpoppt, noch nerviger finde ich es nach einem
Fehler u.U. über mehrere Module hinweg zu suchen und ggf. den Wald vor lauter Bäumen nicht mehr sieht.
"Option Explicit" würde in diesem Fall unmittelbar die Zeile anzeigen, wo der Fehler verborgen ist.
Oftmals nur ein dummer Schreibfehler, eine falsche Deklaration oder ähnliches.
Deshalb nutze ich die Option "Option Explicit" gern, weil letztendlich hilfreich.
Naja, jedem das Seine...
Balu hat geschrieben:In meiner Online-Hilfe gibt es ja dazu ein Beispiel
Wo finde ich diese Hilfe?
Selbstverständlich kann man die gleichen Zähler-Variablen in aufeinanderfolgenden Schleifen verwenden.
Man muss sie nur an der entsprechenden Stelle richtig initialisieren.
Balu hat geschrieben:Ich kenne das Buch nicht. Aber dafür kenne ich den Autor, aus einem anderem Forum wo er lange sehr aktiv tätig war. Und von daher kann ich persönlich sagen, das er echt Ahnung hat.
Ja, von Thomas, als auch von Dir habe ich schon sehr viel gelernt und bin Euch sehr dankbar.
Balu hat geschrieben:Selber arbeite ich fast ausschließlich nur mit Makros in Calc, und kenne mich also nicht so mit Makros für den Writer aus.
Dann ist dies das Richtige für Dich, zumindest in Teilen:
Viele Grüße und Vergnügen
David