ein neuer Tag, ein neues Problem ;-))
Wie bekomme ich Text in eine Textmarke ohne diese zu löschen.
mit activedocument.bookmarks("testtextmarke").range = "Hallo Welt" bekomme
ich zwar den gewünschten Text ins Dokument. Die Textmarke hat sich danach
allerdings verabschiedet.
auch
activedocument.bookmarks("testtextmarke").range.text = "Hallo Welt" führt
mich nicht zum Ziel, denn das Ergebnis ist genau wie beim erstgenannten
Befehl.
Ich muss eine Textmarke nehmen, weil ich Text aus einer UserForm in einen
Positionsrahmen bringen möchte der sich in der Kopfzeile meines Dokuments
befindet.
Wer weiss eine Lösung??
Viele Grüße
Reinhard
> Wie bekomme ich Text in eine Textmarke ohne diese zu löschen.
>
> mit activedocument.bookmarks("testtextmarke").range = "Hallo Welt" bekomme
> ich zwar den gewünschten Text ins Dokument. Die Textmarke hat sich danach
> allerdings verabschiedet.
>
Man muss die Textmarke wieder erstellen, und zwar um den gleichen Bereich,
wo der neue Text steht:
Dim rng as Word.Range
Dim bkm as String
bkm = "TextmarkeName"
If ActiveDocument.Bookmarks.Exists(bkm) Then
Set rng = ActiveDocument.Bookmarks(bkm).Range
rng.Text = "Neuer Eintrag"
ActiveDocument.Bookmarks.Add Name:=bkm, _
Range:=rng
End If
Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister
http://go.compuserve.com/MSOfficeForum
This reply is posted in the Newsgroup; please post any follow question or
reply in the newsgroup and not by e-mail :-)
vielen Dank für Deine Antwort, ich habe bemerkt, dass Du erst gestern eine
gleichlautende Anfrage von Ernst Ertelthalner beantwortet hast.
Ich habe sie leider erst gesehen, als die Anfrage schon raus war. Aber
trotzdem vielen Dank dass Du nochmal geantwortet hast. Dieses Beispiel zeigt
mal wieder wie inkonsequent VBA teilweise programmiert ist. Wozu brauche ich
eine Eigenschaft range.text wenn die Eigenschaft .range genau das gleiche
zurückgibt.
Siehst Du einen Sinn darin, oder ist es ein BUG. Es ist schon komisch, dass
man eine Textmarke neu erstellen muss, wenn man eigentlich nur Ihre
Texteigenschaft ändern möchte. Aber, je weiter man in VBA eintaucht, desto
mehr muss man sich anscheinend wundern :-)).
Viele Grüße
Reinhard
Cindy Meister -WordMVP- <CindyM...@swissonline.ch> schrieb in im
Newsbeitrag: VA.00002bfe.00da0a2b@bob...
> mit activedocument.bookmarks("testtextmarke").range = "Hallo Welt" bekomme
> ich zwar den gewünschten Text ins Dokument. Die Textmarke hat sich danach
> allerdings verabschiedet.
Meine Lösung für dieses Problem sieht so aus:
' existiert das Ziel ?
If ActiveDocument.Bookmarks.Exists("Thema") = True Then
' ja: gehe dorthin, wobei vorhandener Text markiert wird
ActiveDocument.Bookmarks("Thema").Select
With Selection
' nur ein Zeilenende ?
If Len(.Text) <= 2 Then
' Textmarke in einer Tabelle?
If .Information(wdWithInTable) = True Then
' markiere die erste Zeile
.EndKey Unit:=wdLine, Extend:=wdExtend
Else
' erweitere die Markierung bis zum Zeilenende
.Extend Character:=vbCr
' und nimm das CR wieder aus, damit der
' Absatz erhalten bleibt
.MoveLeft Unit:=wdCharacter, Count:=1, _
Extend:=wdExtend
End If
End If
' ersetze den markierten Text durch die Variable
.Text = sThema
' und stelle die dadurch überschriebene
' Textmarke wieder her
ActiveDocument.Bookmarks.Add Name:="Thema", _
Range:=.Range
End With
End If
Falls Deine Textmarke nie in einer Tabelle steht, kannst Du die
Verzweigung rauswerfen und nur den ELSE-Zweig nehmen.
Viel Spaß beim Weiterbasteln!
--
Mit freundlichen Grüßen
Peter Sodermanns
> Wozu brauche ich
> eine Eigenschaft range.text wenn die Eigenschaft .range genau das gleiche
> zurückgibt.
für die meisten (alle?) VBA-Objekte gibt es eine Default-Eigenschaft,
die zurückgeliefert wird, wenn nichts explizit spezifiziert wird. Bei
der Checkbox ist es z.B. .value.
Ein Bug ist das nicht. Ich halte es für ein Zugeständnis an faule
Programmierer, denn es fördert nicht gerade guten, lesbaren
Programmierstil.
> Wozu brauche ich
> eine Eigenschaft range.text wenn die Eigenschaft .range genau das gleiche
> zurückgibt.
>
Jedes Objekt hat eine standard Eigenschaft, wenn nichts spezifiziert wird.
Für Range ist sie .Text (genau wie für UserForm Textbox Steuerelementen,
z.B. - da kann man auch lediglich den Steuerelementnamen einsetzen). Nur,
man lernt mit der Zeit :-): ist es ein wenig gefährlich zu glauben, dass
diese standard Eigenschaft in Zukunft auch die gleiche bleiben wird (MS ist
berüchtigt dafür, dass sie solche Sachen ändert, ohne ein Wort zu
erwähnen).
Ich bemühe mich beim Programmieren, alles sehr spezifisch zu deklarieren.
Ist Dir vielleicht aufgefallen: Dim rng as WORD.Range. Excel hat ja auch
ein Range Objekt, und das könnte u.U. etliche Verwirrung verursachen, wenn
ich beide Objekt Modelle im gleichen Modul anspreche!
> Es ist schon komisch, dass
> man eine Textmarke neu erstellen muss, wenn man eigentlich nur Ihre
> Texteigenschaft ändern möchte.
>
Dieses Verhalten stammt eigentlich aus Words Urgeschichte - lange vor den
Tagen von VBA :-) Textmarken sind ein Teil des Fliesstexts, keine
eigenständig gespeicherte Objekte. Und aus diesem Grunde hat eine Textmarke
keine Texteigenschaft; sie hat eine RANGE Eigenschaft. Wird den gesamten
Bereich, worin sich die Textmarke befindet, überschrieben, verschwindet die
Textmarke...
Und ja, es ist äusserst ärgerlich. Nur war das ganze vor VBA, mit
WordBasic, viel, viel schlimmer. VBA erlaubt im Vergleich eine SEHR
elegante Lösung!
das erklärt natürlich Einiges.
Vielen Dank und viele Grüße
Reinhard
Peter Sodermanns <p...@datus.com> schrieb in im Newsbeitrag:
394094BC...@datus.com...
> Halo Reinhard,
>
> > Wozu brauche ich
> > eine Eigenschaft range.text wenn die Eigenschaft .range genau das
gleiche
> > zurückgibt.
>
das mit den Standardeigenschaften ist wirklich sehr gefährlich. Aber
allmählich wundere ich mich über nichts mehr.
Ich finde Deine spezifischen Deklarationen sehr einleuchtend. Zumal man dann
auch ein Jahr später problemlos erkennen kann was Du Dir dabei gedacht hast.
Es ist nichts schlimmer als Programme von Leuten zu modifizieren, die nach
Kraut und Rüben-Manier programmiert haben.
Das mit den Textmarken funktioniert jetzt echt gut. Ist es der Preis der
Abwärtskompatibilität den wir hier bezahlen? Wie auch immer, gut dass wir
VBA haben und uns nicht mehr Word-Basic ;-) herumquälen müssen.
Viele Grüße, Reinhard
Cindy Meister -WordMVP- <CindyM...@swissonline.ch> schrieb in im
Newsbeitrag: VA.00002c0d.00588eab@bob...
> Hi Reinhard,
>
> > Wozu brauche ich
> > eine Eigenschaft range.text wenn die Eigenschaft .range genau das
gleiche
> > zurückgibt.
> >
> Das mit den Textmarken funktioniert jetzt echt gut. Ist es der Preis der
> Abwärtskompatibilität den wir hier bezahlen?
>
Nein... eher, dass man den Kerncode der Anwendung intakt lassen
will/muss(?).
Habe vor einigen Jahren mit einem ex-MS Mensch über verschiedenen MSWord
Sachen geplaudert, und er sagte, dass alles, was sich im ursprünglichen
Kerncode befinde, eine "heilige Kuh" sei. Man wage es kaum, darin etwas zu
ändern. Wie es wohl dort drin aussieht <g>?
-- Cindy
Nun - Ich denke wir sollten nicht einmal darüber nachdenken wie der Kerncode
aussieht, sonst fallen wir vielleicht noch vom Glauben ab. ;-))
Bis bald, viele Grüße - Reinhard
Cindy Meister -WordMVP- <CindyM...@swissonline.ch> schrieb in im
Newsbeitrag: VA.00002c63.0066343a@bob...
> Nein... eher, dass man den Kerncode der Anwendung intakt lassen
> will/muss(?).
>
> Habe vor einigen Jahren mit einem ex-MS Mensch über verschiedenen MSWord
> Sachen geplaudert, und er sagte, dass alles, was sich im ursprünglichen
> Kerncode befinde, eine "heilige Kuh" sei. Man wage es kaum, darin etwas zu
> ändern. Wie es wohl dort drin aussieht <g>?
das stimmt mit meiner Erfahrung überein:
a) nach einem Word-Absturz ist oft noch eine Task "Winword" aktiv (der
"Kerncode"?). Erst wenn man diese entfernt, kann man das zuletzt
benutzte Dokument wieder öffnen, ohne das Word meint, das Dokument sei
noch in Benutzung.
b) Ich habe mal mit "For i = 1 to 1000; Dialogs(i).Show" gespielt und
jede, aber auch wirklich jede Dialogbox, die in Word jemals eingebaut
wurde, wiedergefunden. Da steckt noch jede Menge alter Ballast drin,
und man braucht sich nicht zu wundern, das Word mit jeder Version fast
den doppelten Platz im RAM braucht.