Dokumenteigenschaften übertragen |
|
Jedes Word-Dokument besitzt eine Reihe von Dokumenteigenschaften, die z.T. automatisch mit Werten gefüllt werden. Diese integrierten Eigenschaften (BuiltInDocumentProperties) umfassen z.B. den Titel, den Autor, die verwendete Dokumentvorlage und weitere Informationen, die über den Menüpunkt "Datei->Eigenschaften" eingesehen und z.T. auch geändert werden können. Von diesen integrierten Dokumenteigeschaften können jedoch nicht alle manuell gesetzt oder geändert werden, sondern werden z.B. beim Speichern automatisch von Word gefüllt. Auch ist die Anzahl dieser Eigenschaften fest. Eine Liste aller integrierten Dokumenteigenschaften erhält man mit folgendem Makro, das diese in ein neues Dokument einfügt: Sub AlleBuiltInDocumentProperties() Dim prop As DocumentProperty Documents.Add For Each prop In ActiveDocument.BuiltInDocumentProperties With Selection .InsertParagraphAfter .InsertAfter prop.Name & "= " On Error Resume Next .InsertAfter prop.Value End With Next prop End Sub Neben diesen Dokumenteneigenschaften gibt es auch noch die benutzerdefinierten Eigenschaften (CustomDocumentProperties), die beliebig hinzugefügt und geändert werden können. So lassen sich diese gut für Informationen, die nur in dem Dokument und nicht in der Dokumentvorlage gespeichert werden sollen, verwenden. Auf diese kann man später aus Prozeduren heraus dokumentspezifisch zugreifen und die gespeicherten Informationen weiterverwenden. Um die benutzerspezifischen Dokumenteigenschaften auszulesen, genügt es, alle per Schleife zu durchlaufen. Damit später besser auf die Eigenschaften zugegriffen werden kann, werden die Eigenschaftsnamen und -werte in eine zweispaltige Liste geschrieben. For Each oProp In .CustomDocumentProperties If oProp.Value <> "" Then lst.AddItem oProp.Name & ":" & oProp.Value lst.List(lst.ListCount - 1, 1) = oProp.Name lst.List(lst.ListCount - 1, 2) = oProp.Value End If Next oProp Bei den integrierten Eigenschaften ist das Auslesen zwar ebenfalls recht einfach, da aber eine Reihe von Eigenschaften nicht gesetzt werden können, sollten diese am Besten erst gar nicht angezeigt werden. Um die Beschreibbarkeit zu testen, wird versucht die Eigenschaft mit einen Wert zu füllen. Wird keine Fehlermeldung zurückgegeben oder stimmt nur der Dateityp nicht, wird diese Eigenschaft dann ebenfalls in die Liste eingelesen: For Each oProp In .BuiltInDocumentProperties strTemp = oProp.Value Err.Clear oProp = "@" If oProp = "@" Then oProp = strTemp If Err.Number = 0 Or Err.Number = 13 Then lst.AddItem oProp.Name & ":" & oProp.Value lst.List(lst.ListCount - 1, 1) = oProp.Name lst.List(lst.ListCount - 1, 2) = oProp.Value End If End If Next oProp Auch beim Kopieren der Eigenschaften muss ein Trick angewendet werden, sofern nicht irgendwie vermerkt wird, was für ein Eingeschafttyp kopiert werden soll. In diesem Fall wird einfach versucht, eine Objektvariable auf die Eigenschaft zu setzen. Schlägt das fehl, wird also Nothing zurückgegeben, bedeutet dies, dass es keine integrierte Eigenschaft ist, und es wird eine entsprechende benutzerdefinierte Eigenschaft hinzugefügt. Evtl. bereits bestehende Eigenschaften werden dabei überschrieben. Eine Besonderheit gibt es noch bei der einem Dokument zugewiesen Dokumentvorlage: Diese lässt sich nicht einfach kopieren, sondern muss dem Dokument neu zugewiesen werden: With oDoc On Error Resume Next Err.Clear Set myProp = Nothing Set myProp = .BuiltInDocumentProperties(sPropName) If myProp Is Nothing Or Err.Number = 0 Then If .BuiltInDocumentProperties(sPropName) = .BuiltInDocumentProperties(wdPropertyTemplate) Then .AttachedTemplate = Documents(frmCopyProperties.lblSource.Tag).AttachedTemplate.Path _ & Application.PathSeparator & sPropValue End If Set myProp = .CustomDocumentProperties.Add(Name:=sPropName, LinkToContent:=False, _ Value:=sPropValue, Type:=msoPropertyTypeString) Else myProp.Value = sPropValue End If End With Nach dem Kopieren der Eigenschaften werden diese direkt wieder eingelesen und man kann direkt das Ergebnis sehen.
Die angebotene Dokumentvorlage kann z.B. als Add-In eingebunden werden und bietet die Möglichkeit, die ToolTipps der Symbolleisteneinträge zu ändern. Dazu wird durch die Dokumentvorlage eine neue Symbolleiste angezeigt, in der nur eine Schaltfläche enthalten ist. Da dieses Beispiel nur eine Möglichkeit aufzeigen soll, wie sich Eigenschaften kopieren lassen, steht der Quellcode zur freien Erweiterung oder Änderung zur eigenen Verfügung. |
Besucher: 0 online | 0 heute | 0 diesen Monat | 2219173 insgesamt | Seitenaufrufe: 112 | Letzte Änderung: 24.06.2006 | © 2001-18 Christian Freßdorf | ||||
Das Paradies ist überall. Martin Luther |
powered by phpCMS and PAX |