Hallo
ich habe ein Makro das text an einem Lesezeichen einfügt. Wenn ich das Makro nochmal ausführe wird der neue Text für den alten gesetzt. Ich will ab er das dieser überschrieben wird.
hier mein Code
dim oDoc as Object
dim obookmarks as Object
dim obookmark as Object
dim oCursor as Object
oDoc=thisComponent
oBookmarks = oDoc.getBookmarks()
oBookmark = oBookmarks.getByName("Asp")
oCursor = oDoc.Text.createTextCursorByRange(oBookmark.Anchor)
oCursor.string = "Hans"
#####
Text an Lesezeichen überschreiben
Moderator: Moderatoren
Hey lysienne,
Natürlich kannst du auch bestehenden Text ersetzen.
Mit dieser Zeile erzeugst du einen Text-Cursor am Punkt oBookmark.Anchor. Willst du jetzt die nächsten 5 Zeichen "markieren", so bewegst du den Cursor um fünf Zeichen vorwärts und markierst diese:
Wenn du jetzt am Cursor den Sting einfügst, werden die markierten Zeichen überschrieben.
Die Problematik in deinem Fall hat jedoch zwei "Tücken":
Erstens musst du wissen, was für ein "alter" Text da drin steht, um ihn entsprechend zu markieren. Einfach, wenn es sich immer nur um ein Wort handelt, oder bis zum Ende des Absatzes geht..., kompliziert, wenn es beliebige Strings innerhalb von Fliesstext sind.
Zweitens: Durch bewegen des Cursors und markieren des Bereiches wird die Textmarke mit markiert und dadurch überschrieben (sprich: gelöscht). Die musst du dann entweder neu einfügen oder insgesamt dein Dokument anders planen, zum Beispiel so, dass nach der Bookmark zunächst ein Leerzeichen folgt und dann erst der Text. Dann kannst du sie immer erhalten:
Wichtig Hierbei: Das erste Zeichen nach der Bookmark sollte eben ein Leerzeichen sein!
Gruss
Thomas
Ich denke, du meinst nicht "für" sondern "vor"? Das wäre das normale Verhalten.Wenn ich das Makro nochmal ausführe wird der neue Text für den alten gesetzt. Ich will ab er das dieser überschrieben wird.
Natürlich kannst du auch bestehenden Text ersetzen.
Code: Alles auswählen
oCursor = oDoc.Text.createTextCursorByRange(oBookmark.Anchor)
Code: Alles auswählen
oCursor.goRight(5, true)
Die Problematik in deinem Fall hat jedoch zwei "Tücken":
Erstens musst du wissen, was für ein "alter" Text da drin steht, um ihn entsprechend zu markieren. Einfach, wenn es sich immer nur um ein Wort handelt, oder bis zum Ende des Absatzes geht..., kompliziert, wenn es beliebige Strings innerhalb von Fliesstext sind.
Zweitens: Durch bewegen des Cursors und markieren des Bereiches wird die Textmarke mit markiert und dadurch überschrieben (sprich: gelöscht). Die musst du dann entweder neu einfügen oder insgesamt dein Dokument anders planen, zum Beispiel so, dass nach der Bookmark zunächst ein Leerzeichen folgt und dann erst der Text. Dann kannst du sie immer erhalten:
Code: Alles auswählen
oBookmark = oBookmarks.getByName("Asp")
oCursor = oDoc.Text.createTextCursorByRange(oBookmark.Anchor)
oCursor.goRight(1, false) 'bewegt den Cursor um 1 Zeichen vorwärts
REM oCursor.gotoEndOfWord(true) 'bewegt den Cursor um ein Wort
oCursor.string = "Hans" 'ersetzt das Wort durch Hans
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Danke für deine Hilfe.
So funktioniert es innerhalb von "normalem text".
ich hatte vergessen zu erwähnen, das die Bookmarks innerhalb einer Tabelle sind. Und es schmeisst es mir einen Laufzeitfehler.
Habe hier im Forum noch einen Beitrag gefunden der mit 2 Bookmarks arbeitet. Geht aber auch nicht in einer Tabelle.
Noch eine Idee?
So funktioniert es innerhalb von "normalem text".
ich hatte vergessen zu erwähnen, das die Bookmarks innerhalb einer Tabelle sind. Und es schmeisst es mir einen Laufzeitfehler.
Habe hier im Forum noch einen Beitrag gefunden der mit 2 Bookmarks arbeitet. Geht aber auch nicht in einer Tabelle.
Noch eine Idee?
Hey lysienne,
Die sind ziemlich entscheident.
OK, dann lad dir am die "Rechnungsvorlage" von -> hier herunter. Dort werden an Bookmarks in einer Tabelle die laufenden Rechnungsnummern eingetragen. Dort findest du dann auch die fehlenden Codeteile.
Gruss
Thomas
Tuia, soche "kleinigkeiten" sollte man erwähnenich hatte vergessen zu erwähnen, das die Bookmarks innerhalb einer Tabelle sind.

Die sind ziemlich entscheident.
OK, dann lad dir am die "Rechnungsvorlage" von -> hier herunter. Dort werden an Bookmarks in einer Tabelle die laufenden Rechnungsnummern eingetragen. Dort findest du dann auch die fehlenden Codeteile.
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic