Word 2010 Makro: Textfeld in Userform einen Wert aus Dokumenteigenschaften zu ordnen

botanikbob

Newbie
Registriert
Juni 2013
Beiträge
2
Hallo ComputerBase-Forum,
bei der Arbeit bearbeite ich momentan die Standarddokumente meiner Abteilung (Testreports beispielsweise). Daher diese teilweise über 100 Seiten sind, habe ich für einige Eigenschaften wie Projektname, Testdatum, Dokumenttitel etc. Eigenschaften erstellt, welche ich im Dokument mit Feldern verknüpft habe (spart Arbeit das glaubt man nicht!).
Dazu habe ich noch ein Word Makro geschrieben, welches eine Eingabeaufforderung aufruft, in der man durch Labels sieht welche Dokumenteigenschaft in das nebenstehende Textfeld eingetragen werden soll. Hat man alle Werte eingetragen und drückt den "Speichern"-Knopf, werden die Werte den entsprechenden Dokumenteigenschaften zugeordnet und alle Felder (auch in den Kopf/Fußzeilen) aktualisiert. Das Makro klappt also wunderbar.

Aber es gibt ein Problem, das verdammt nervig ist, und das ich gerne gelöst hätte (Leider kenn ich mich mit VBA garnicht aus und hab schon einige Zeit für das obige Makro investieren müssen; jetzt komme ich jedoch gar nicht mehr weiter):

Ich möchte, dass in den Textboxen meiner Eingabeaufforderung bereits die entsprechenden Werte der Eigenschaft stehen, also quasi dass beim Öffnen der Eingabeaufforderung mein Makro (irgendwie :D) die Werte ausliest und in das Textfeld einträgt und diese nicht leer sind (Denn hier entsteht das Problem, dass wenn man nur das Datum abändern möchte über das Makro man alle 14 Eigenschaften neu eintragen muss, denn die Textboxen sind standartmäßig leer und beim Speichern wird das leere Feld als Eigenschaft genommen).
Ich weiß wie man einer Textbox aus einer UserForm einen Wert zuordnet (TextBox.Value = "MeinText"); dies hilft mir jedoch nicht weiter, weil es dann kein variabler Wert ist.
Der Befehl TextBox.Value = ActiveDocument.CostumDocument.Properties("Project") bringt leider auch nicht die gewünschte Funktion, obwohl ich andersherum komischerweiße dem Wert in der Textbox der eigenen Dokumenteigenschaft "Project" zuordne (Es kommt eine Fehlermeldung).

Ich bedanke mich bereits jetzt für jeglichen Zeitaufwand zum Durchlesen meines Anliegens und freue mich auf eventuelle Antworten (eine "for Dummies" Antwort wäre sehr nett, da ich mich wie gesagt eigentlich garnicht mit VBA auskenne)
PS: Falls mein Code vom Makro benötigt wird einfach Bescheid sagen

Mit freundlichen Grüßen,
Raphael
 
Danke ersteinmal für die schnelle Antwort.
Wenn ich das richtig sehe, würde das zweite Makro die von MS eingebauten Eigenschaften nehmen und in einer separaten Textbox anzeigen. Das ist leider nicht das was ich suche :(.


Grüße
Raphael

Edit: Ich poste folglich einfach mal meinen Code; eventuell macht es mein Anliegen etwas verständlicher.
Code:
Sub Eingabeaufforderung ()

Dim oFrm As Eingabeaufforderung

Set oFrm = New Eingabeaufforderung

oFrm.Show

ActiveDocument.CostumDocumentProperties("Project") = oFrm.Project.Value
ActiveDocument.CostumDocumentProperties("DocTitle") = oFrm.DocTitle.Value
ActiveDocument.CostumDocumentProperties("DocNo") = oFrm.DocNo.Value
ActiveDocument.CostumDocumentProperties("DocIssue") = oFrm.DocIssue.Value
ActiveDocument.CostumDocumentProperties("DocRevision") = oFrm.DocRevision.Value
ActiveDocument.CostumDocumentProperties("DocDate") = oFrm.DocDate.Value
ActiveDocument.CostumDocumentProperties("TestDate") = oFrm.TestDate.Value
ActiveDocument.CostumDocumentProperties("TestprocedureDate") = oFrm.TestprocedureDate.Value
ActiveDocument.CostumDocumentProperties("TestObject") = oFrm.TestObject.Value
ActiveDocument.CostumDocumentProperties("TestObjectType") = oFrm.TestObjectType.Value

Range.Document.Fields.Update
AlleKopfundFusszeilen
Set oFrm = Nothing

End sub
-------------
Sub AlleKopfundFusszeilen()
Dim i As Long
Dim Abschnitt As Section
For Each Abschnitt In ActiveDocument.Sections
For i = 1 To 3
Abschnitt.Headers(i).Range.Fields.Update
Abschnitt.Headers(i).Range.Fields.Update
Next i
Next
End Sub
-------
Private Sub Document_New()

End Sub


Auf meinem Speicher-Button ist das Unload_Me belegt worden.
 
Zuletzt bearbeitet:
Mit Feldern zu hantieren ist seit 2007 furchtbar unclever.
Blende dir erstmal über die Optionen die Entwickler-Registerkarte ein.
Über Einfügen > Schnellbausteine > Dokumenteneigenschaften kannst du dir ContentControls einfügen lassen.
Wählst du eins, kannst du über die Entwicklerkarte noch Namen und zB Formatierung vergeben.

Die ContentControls haben zwei sehr geile Eigenschaften
1. Gegenüber einer Textmarke oder einem Feld aktualisieren Sie sich automatisch und müssen nicht erst im Inhalt gesucht werden. Sie haben einen greifbaren Namen.
2. Sie sind bidirektional, jedes ContentControl gleicher Funktion hängt zusammen. Änderst du in einem den Dokumententitel, dann wird es in der Dokumenteneigenschaft geändert und in allen abgeleiteten mit. Ein Feld kann hingegen nur auslesen, nicht ändern.

Wenn du dann noch wirklich mit VBA hantieren musst funktioniert das bisschen anders.
So grob aus dem Gedächtnis
Dim cct As Word.ContentControl

For Each cct in ActiveDocument.ContentControls
With cct.Name
cct.Label = formular.textbox.Value
End With
Next

Du definierst ein Objekt für die ContentControls.
Danach durchläufst du das gesamte Dokument nach alles Controls
und je nach dem Namen des cct füllst du aus dem Formular den Inhalt ein.
Intelli Sense wird dir die passenden Objekte vorschlagen, die da oben stimmen net 100%.

Es gibt auch noch ein Tool womit du CCTs mit so nicht verfügbaren Dokumenteigenschaften verbinden kannst. Das find ich aber fricklig, die eingebauten funktionieren problemlos.
 
Zuletzt bearbeitet:
Zurück
Oben