Wie kann ich per VBA ein Feld im Word einfügen

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

meinst du es so?

Sub Feld_ins()
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
        "DRUCKDAT ", PreserveFormatting:=True
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
        "AUTOR ", PreserveFormatting:=True

End Sub

PS Feierabend für heute. Muss morgen um 4:45 aus den Federn!!

Schaue morgen nachmittags mal wieder rein

Und dann bitte alle Ewiderungen hier oben abgeben! Sonst suche ich mich bei der langen Latte tot

0
@PauleVBA

Genau das meine ich. Den Ersten Teil aber belassen: With MyRange .InsertParagraphAfter .InsertAfter MyProperty.Name & vbTab

Also dann bis morgen, und vergiss deine Belohnung nicht ;-)

0
@marc2108

Eigentlich wie nachfolgend, nur halt eben so dass es funktioniert...

For Each MyProperty In ActiveDocument.CustomDocumentProperties
    With MyRange
        .InsertParagraphAfter
        .InsertAfter MyProperty.Name & vbTab
        On Error Resume Next
        '.InsertAfter MyProperty.Value
        Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
        "MyProperty.Value", PreserveFormatting:=True
    End With
Next
0
@marc2108

Kannst es sein lassen, habe mittlerweilen eine Lösung erhalten die alles abdeckt.

0

Hier der richtige Code:

Sub Custom_Change()
Dim MyRange As Range
Dim MyProperty As Object
Dim I As Long

Set MyRange = ActiveDocument.Content
MyRange.Collapse Direction:=wdCollapseEnd
    With ActiveDocument.Bookmarks
        .Add Range:=Selection.Range, Name:="Delete"
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With

For Each MyProperty In ActiveDocument.CustomDocumentProperties
    With MyRange

        .Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
        "DOKEIGENSCHAFT " & MyProperty.Name & " "
        .InsertParagraphAfter
        .Collapse Direction:=wdCollapseEnd
        .InsertParagraphAfter
        .Collapse Direction:=wdCollapseEnd
        .InsertAfter vbCr & MyProperty.Name & vbTab
        .Collapse Direction:=wdCollapseStart
        .Select
        I = I + 1
    End With
Next
Selection.GoTo What:=wdGoToBookmark, Name:="Delete"
Selection.MoveDown Unit:=wdLine, Count:=I, Extend:=wdExtend
Selection.Delete Unit:=wdCharacter, Count:=I

End Sub

erstens: es geht auch das erste! Aber das ist ja nicht gefragt. Hier ein Beispiel-Code:

Option Explicit

Sub Property_Read()
Dim MyProperty As Object
Dim MyRange As Range

Set MyRange = ActiveDocument.Content
MyRange.Collapse Direction:=wdCollapseEnd
For Each MyProperty In ActiveDocument.BuiltInDocumentProperties
    With MyRange
        .InsertParagraphAfter
        .InsertAfter MyProperty.Name & "= "
        On Error Resume Next
        .InsertAfter MyProperty.Value
    End With
Next
End Sub

Hoffe es hilft!

Schreibt A L L E Felder der Eiegenschaften ans Ende deines doc.

Danke schon mal, aber wo füge ich den Code ein? Wenn ich ein Makro neu erstelle und dann den Code einfüge, rüffelt das word... Kenne mich eben mit VBA nix aus.

0
@marc2108

...und soweit ich verstehe bezoiehtst du dich auf die Dokumenteigenschaften "BuiltInDocumentProperties". Wie heissen die Selbst definierten Eigenschaften?

0
@marc2108

...und anstelle des geschriebenen Wertes möchte ich ein Feld (ich meine das Feld, das ich unter dem Ribbon "Einfügen" -> Schneellbausteine -> Feld)...

Meine Güte, wenn du das hinkriegst, darfst du mir deine Kontonummer geben!!

0
@marc2108

von welchen "Selbst definierten Eigenschaften" redest du??

So was kenne ich leider nicht

Code einsetzen:

mit Alt F11 in den Code-Editor wechseln, links auf das Dokument gehen, Rechtsklick, Modul einfügen. Modul öffnen und rechts den Code eingeben.

0
@marc2108

ich verstehe leider nur Bahnhof:

welchen Text willst du auslesen und wo willst du ihn hinschreiben?

Vielleicht schreibst du mal den Ablauf ein, den du manuell machen würdest?!?

0
@PauleVBA

Ok, die eigenen Eigenschaften und das Einfügen habe ich geschafft. Ich meinte die "CustomDocumentProperties"

Wenn ich den Code genau so einfüge, rüffelt Word. Ich muss die oberste Zeile entfernen, dann gehts.

Kannst du mir noch verraten (falls du es weisst) wie ich nun ein Feld einfüge anstelle des Value?

Super Sache, hast was gut! Kannst mir auf marc(at)wamsoft(punkt)ch deine Adresse geben, schick dir 50sFr. Wenn du mir noch sagen kannst, wie ich anstelle eines = einen Tabulator und anstelle des Value ein Feld reinkriege, mache ich 100 sFr draus.

Mensch, ich bin dir SOOOOOOO dankbar!!!! Du hast mir Stunden an zukünfitger Arbeit mit dem Skript gespart.

0
@marc2108

OK, Tabulator habe ich rausgefunden. Anstelle von " = " einfach vbTab :-)

0
@marc2108

OK, Tabulator habe ich rausgefunden. Anstelle von " = " einfach vbTab :-)

0

Und hier die Lösung für Teile der Eigenschaften (kann über Case beeinflusst werden!)

Option explicit

Sub some_Property()
Dim MyProperty As Object
Dim MyRange As Range

Set MyRange = ActiveDocument.Content
MyRange.Collapse Direction:=wdCollapseEnd
For Each MyProperty In ActiveDocument.BuiltInDocumentProperties
    With MyRange
    On Error Resume Next
        Select Case MyProperty.Name
            Case "Title"
                .InsertParagraphAfter
                .InsertAfter MyProperty.Name & "= "
                .InsertAfter MyProperty.Value
            Case "Subject"
                .InsertParagraphAfter
                .InsertAfter MyProperty.Name & "= "
                .InsertAfter MyProperty.Value
            Case "Autor"
                .InsertParagraphAfter
                .InsertAfter MyProperty.Name & "= "
                .InsertAfter MyProperty.Value
            Case "Keywords"
                .InsertParagraphAfter
                .InsertAfter MyProperty.Name & "= "
                .InsertAfter MyProperty.Value
            Case "Comments"
                .InsertParagraphAfter
                .InsertAfter MyProperty.Name & "= "
                .InsertAfter MyProperty.Value
            Case "Category"
                .InsertParagraphAfter
                .InsertAfter MyProperty.Name & "= "
                .InsertAfter MyProperty.Value
            Case "Manager"
                .InsertParagraphAfter
                .InsertAfter MyProperty.Name & "= "
                .InsertAfter MyProperty.Value
            Case "Company"
                .InsertParagraphAfter
                .InsertAfter MyProperty.Name & "= "
                .InsertAfter MyProperty.Value
        End Select
    End With
Next
End Sub

Ist es das?

muss

        Case "Author"

heißen und nicht "Autor"

Sorry

0
@PauleVBA

Die untere Lösung passt besser. Kannst du mir BIIIIIIIITEEEEEEE noch die zusätzliche Fragen beantworten?? Danke!!!

0

von welchen "Selbst definierten Eigenschaften" redest du??

So was kenne ich leider nicht

Code einsetzen:

mit Alt F11 in den Code-Editor wechseln, links auf das Dokument gehen, Rechtsklick, Modul einfügen. Modul öffnen und rechts den Code eingeben.

0

Die Frage ist :

willst du unter ''Datei'' '' Eigenschaften'' ein Feld füllen (geht nach meiner Erkenntnis nicht)

oder

willst du ein Feld unter ''Datei'' ''Eigenschaften'' auslesen und in ein Doc einfügen (da müsste ich mal sehen, ob ich was finde)

Hallo Ich möchte zweiteres: Die Eigenschaften dynamisch mit einer Schlaufe auslesen und im Word hineinschreiben.

Wenn du mir das Problem löst, kriegste eine Belohnung!

0

Was möchtest Du wissen?