VBA: Felder in Word ansprechen

Hallo,

innerhalb meines Dokumentes habe ich verschiedene Felder eingefügt. Ein Feld trägt z.B. den Namen „Feld123“ und hat einen Feldwert „Wert123“ vorgegeben.

Nun möchte ich mittels VBA dieses Feld ansprechen und den Feldwert ändern. Der Feldcharakter soll dabei jedoch erhalten bleiben. lediglich der Inhalt des Feldes soll ergänzt werden.

Wie spreche ich ein Feld unter Word2003 an?

Active Document. Fields(Feld123).Value = "Test"
Active Document. Fields("Feld123").Value = "Test"

funktioniert nicht.

Weiß jemand Rat?

Gruß,

Pierre

Hallo,
kurz aber wirksam:
schau mal in der Word-VBA-Hilfe nach „result“.
Gruß tester

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo tester,

die VBA-Hilfe hatte ich auch schon vor meiner Anfrage hier beherzigt, jedoch komme ich mit der Hilfe absolut nicht zurecht.

Die VBA-Hilfe liefert:

i>Gibt ein Range-Objekt zurück, das ein Feldergebnis repräsentiert. Sie können auf ein Feldergebnis zugreifen, ohne die Darstellung der Feldfunktion zu ändern. Mithilfe der Text-Eigenschaft geben Sie Text aus einem Range-Objekt zurück. Lese-/Schreibzugriff.

In diesem Beispiel wird auf das erste Feld in der Markierung Fettformatierung angewendet:

If Selection.Fields.Count \>= 1 Then
 Set myRange = Selection.Fields(1).Result
 myRange.Bold = True
End If

Mache ich daraus ein Minimalbeispiel in der Form:

Sub Makro1()
Dim MyRange As Range
Set MyRange = Selection.Fields(1).Result
MyRange.Bold = True
End Sub

So erscheint bei mir die „5941“-Fehlermeldung: Das angegebene Objekt ist in der Sammlung nicht enthalten.

Gruß,

Pierre

Hallo,

die Fehlermeldung bedeutet eigentlich, dass ein angesprochenes Element in einer Auflistung nicht existiert.
„Selection“ bezieht sich auf die aktuelle Markierung im Worddokument.
Ich vermute, Du hast das entsprechende Feld nicht markiert, so dass in der aktuellen Auswahl kein Feld existiert.

Probier mal folgendes Makro

Sub Makro1()
Dim MyRange As Range
Set MyRange = ActiveDocument.Fields(1).Result
MyRange.Bold = True
End Sub

Dies habe ich bei mir getestet und es ist problemlos gelaufen.

Für den Fall, dass dann ein Typfehler gemeldet wird, handelt es sich bei dem Feld wahrscheinlich um ein Formularfeld.
In diesem Fall liefert „result“ kein Range-Objekt sondern das Feldergebnis. Die Festlegung für MyRange müsste dann so lauten:

Set MyRange = ActiveDocument.FormFields(1).Range

Gruß tester

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi Pierre

was genau für felder sind das eigentlich? felder können im word ganz unterschiedliche sachen sein - teilweise auch unterschiedlich anzusprechen. bitte etwas genauer definieren.

ausserdem: natürlich geht es, nur den feldtext (also das result) zu ändern, ohne das feld selbst zu ändern. fragt sich nur, was für einen sinn das haben soll. spätestens beim nächsten aktualisieren des feldes (und das ist defaultmässig spätestens beim drucken der fall) steht wieder der alte wert im feld. ich denke mal, dass das nicht das ist, was du willst.

sind es vielleicht formular-eingabefelder? und du willst automatisiert das formular mit daten befüllen? dann geht es nämlich in etwa so:

Sub formtest()
Dim Eingabe As FormField

Set Eingabe = ActiveDocument.FormFields(„Text1“)
Eingabe.Result = „hallo“

End Sub

das funktioniert dann desshalb, weil das dokument eh geschützt sein muss und nun die felder nicht aktualisiert werden (zumindest nicht die formularfelder).

lg
erwin