PDA

Vollständige Version anzeigen : Bookmarks hintereinander setzen mit Zeilenumbruch


Stefan67!
30.08.2019, 14:09
Hallo zusammen,

wie bekomme ich es hin, an einer bestimmten Position (Bookmark_0)
mehrere Bookmarks hintereinander jeweils durch Zeilenumbruch und Leerzeile getrennt in ein Worddokument einzufügen?

BM1

BM2

BM3
.....

Habe folgenden Code:

Sub SetBookmark()

Dim counter As Integer
Dim topic As String

ActiveDocument.Bookmarks("start_text").Range = "Ü0"
ActiveDocument.Bookmarks("start_text").Select
Selection.InsertAfter vbNewLine

For counter = 1 To 10

topic = "Ü" & counter
ActiveDocument.Bookmarks.Add Name:=topic
Selection.InsertAfter vbNewLine
ActiveDocument.Bookmarks(topic).Range = topic
Selection.InsertAfter vbNewLine
Next counter
End Sub



allerdings setzt dieser das neue BM über das vorhergehende:

..

BM3

BM2

BM1


Wer kann hier helfen?

Gerhard H
30.08.2019, 16:22
Hallo Stefan,

wenn du steuern willst, wo die Textmarke angelegt wird, darfst du das Argument Range nicht vergessen:
Activedocument.Bookmarks.Add Name, <font color = "red">Range</font>

Das folgende Makro legt eine Reihe offener Textmarken an (da ich mir nicht sicher bin, ob du das so gewünscht hast, mit Musterdokument):
Sub SetBookmark()
Dim counter As Integer
Dim topic As String
Dim bmRange As Range

With ActiveDocument
'Text an vorhandene Textmarke eintragen
Set bmRange = .Bookmarks("start_text").Range
bmRange.Text = "Ü0"

'Weitere Textmarken anlegen
For counter = 1 To 10
topic = "Ü" & counter
bmRange.InsertAfter vbLf & vbLf
Set bmRange = .Range(bmRange.End, bmRange.End + 1)
bmRange.Collapse direction:=wdCollapseEnd

.Bookmarks.Add Name:=topic, Range:=bmRange

'bei Bedarf neue Textmarken gleich beschriften:
bmRange.Text = "Ich bin Textmarke Nummer " & counter
Next counter

End With
End Sub
Wenn das Ergebnis nicht dem Gewünschten entspricht, erkläre bitte, wie du mit den Textmarken später weiter zu verfahren gedenkst.

Stefan67!
02.09.2019, 07:17
Hallo Gerhard,

besten Dank, klappt soweit wirklich gut. Wenn Du schon fragst, es gäbe da noch etwas, was ich aber bisher auch noch nicht gegoogelt habe:

Nachdem eine Textmarke eingefügt ist, soll folgendes damit passieren:

Pro Textmarke werden insgesamt 3 Texte importiert, jeweils unterschiedlich formatiert und mit Zeilenumbruch getrennt. Die Formatierung soll gemäß einer bereits existierenden Formatvorlage erfolgen.

Wenn Du den Code dafür auch schnell parat hättest, ersparst Du mir die Recherche...(für die ich dann ggf. auch noch nen neuen threat aufmachen würde).

Danke aber nochmal für den bisherigen Code

Stefan67!
02.09.2019, 09:56
Was genau bedeuten diese beiden Zeilen:

Set bmRange = .Range(bmRange.End, bmRange.End + 1)
bmRange.Collapse direction:=wdCollapseEnd

Gerhard H
03.09.2019, 14:53
Hallo Stefan,

auf die Schnelle, da ich im Moment nur sporadisch am PC sein kann:

BmRange ist ja hier definiert als der "Bereich", den die Textmarke einnimmt:
Set bmRange = .Bookmarks("start_text").Range.

"Bereich" steht in Anführungszeichen, weil dein zuerst geposteter Code nur funktionieren konnte, wenn du mit offenen Textmarken arbeitest; d.h. solche, die bei blinkender Schreibmarke (statt bei markiertem Bereich) erstellt werden. Den Unterschied siehst du, wenn du dir in Optionen > Erweitert > Dokumentinhalt anzeigen, die Textmarken anzeigen lässt.

Nach dem Einfügen zweier leerer Absatzmarken...
bmRange.InsertAfter vbLf & vbLf
wird ein neuer Bereich für die nächste Textmarke definiert: er beginnt mit dem Ende des alten Bereichs, und endet ein Zeichen danach:
Set bmRange = .Range(bmRange.End, bmRange.End + 1)
Allgemein. Ein Range in Word ist immer definiert über seinen Startposition und seine Endposition:
MeinBereich = Activedocument.range(startwert, endwert)

Bedauerlicherweise dürfte dieses Vorgehen wie gesagt, nur funktionieren, wenn die Textmarken nicht weiter vom Makro berbeitet werden sollen. Das Füllen der Textmarken mit Inhalt bedingt geschlossene (Bereichs-)Marken, die jedoch beim Befüllen erst mal zerstört werden, und deshalb im gleichen Atemzug vom Makro wiederhergestellt werden müssen.

Um das Makro dementsprechend anzupassen braucht es folgende Informationen:

Woher kommen diese drei Texte? Sind das Autotextexte?
Wie entscheidet man, an welche Marke welche Texte kommen?
Gibt es die in einem Stück (d.h. 3 Texte = 1 fertiger Block)

Eventuell ergeben sich noch weitere Fragen. Um zunächst ein bisschen Klarheit zu bekommen, erstelle ein Musterdokument mit der Wunschlösung händisch (es müssen ja nicht alle 10 Textmarken sein) und erläutere daran die o.g. Fragen. Und wie gesagt, eine Antwort kann derzeit ein bisschen dauern.