Wie kann ich per VBA ein Feld im Word einfügen
Hallo Wie kann ich mit VBA ein Eigenschaftsfeld automatisch im Word einfügen?
Gruss
7 Antworten
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
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
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.
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.
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?
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.
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..
ein bisschen. Allerdings mehr in VBA unter Autocad, und weniger ind en Office Produkten.
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