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

7 Antworten

Vom Beitragsersteller 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

PauleVBA  01.02.2012, 21:43

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
marc2108 
Beitragsersteller
 01.02.2012, 22:36
@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 
Beitragsersteller
 01.02.2012, 22:41
@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 
Beitragsersteller
 02.02.2012, 14:20
@marc2108

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

0

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.


marc2108 
Beitragsersteller
 01.02.2012, 21:04

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 
Beitragsersteller
 01.02.2012, 21:06
@marc2108

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

0
marc2108 
Beitragsersteller
 01.02.2012, 21:09
@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
PauleVBA  01.02.2012, 21:16
@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
PauleVBA  01.02.2012, 21:27
@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
marc2108 
Beitragsersteller
 01.02.2012, 21:54
@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 
Beitragsersteller
 01.02.2012, 21:58
@marc2108

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

0
marc2108 
Beitragsersteller
 01.02.2012, 21:58
@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?


PauleVBA  01.02.2012, 21:17

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
PauleVBA  01.02.2012, 21:08

muss

        Case "Author"

heißen und nicht "Autor"

Sorry

0
marc2108 
Beitragsersteller
 01.02.2012, 21:13
@PauleVBA

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

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

am besten Du startes den VBA Makrorecorder, machst das manuell (Feld einfügen), und schaust, was Word da für einen Code fabriziert hat..


marc2108 
Beitragsersteller
 01.02.2012, 16:24

verstehst du was von VBA?

0
fuchsi1970  01.02.2012, 16:28
@marc2108

ein bisschen. Allerdings mehr in VBA unter Autocad, und weniger ind en Office Produkten.

0