2
www.ChF-Online.de  

Dokumenteigenschaften übertragen

   Neuigkeiten
   API-Aufrufe in VBA
   VBA2HTML
   Word
   Word-VBA
 Verschiedenes
 Feld-Arbeiten
 Form-Sachen
 Menü-/Symbolleisten
 VBA und Lotus Notes
 VBA und Mail
 Inside VBAIDE
 Von Word nach Outlook
aktiv aktiv Fix-und-Fertiges/Projekte
 Aufgaben in OL eintragen
 Einfacher Dateibrowser
 Formatvorlagen
 Formularfelder sichern
 Formluarfelder formatieren
 Formluarfelder formatieren 2
 Formluarfelder formatieren 3
 Formular-QuickInfos
 Kontextmenü erstellen
 Sicherheitskopien an bel. Orten
 Sicherheitskopien erstellen Word 2007/2010
 ToolTipps ändern
aktiv  Dokumenteigenschaften kopieren
 (Jahres-)Kalender erstellen
 Zeichen-Zähler
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
Getestet unter Word2000Getestet unter WordXP  
VBA-Code verfügbar: ja
Beispiel anzeigen
Makro/Datei speichern
Print

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.
Gespeichert werden Änderungen erst beim Beenden der Userform oder wenn ein neues Dokument geöffnet wird.

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.

Symbolleiste

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: 2 online  |  45 heute  |  2332 diesen Monat  |  2154687 insgesamt | Seitenaufrufe: 85   Letzte Änderung: 24.06.2006 © 2001-18 Christian Freßdorf
  Was ist der Unterschied zwischen einer Dame und einem Diplomaten?
-- Sagt ein Diplomat "ja", meint er "vielleicht", sagt er "vielleicht", meint er "nein", und sagt er "nein", ist er kein Diplomat.
-- Sagt eine Dame "nein", meint sie "vielleicht", sagt sie "vielleicht", meint sie "ja", und sagt die "ja", ist sie keine Dame.
Charles Maurice de Talleyrand, 1754-1838, frz. Staatsmann
 powered by phpCMS and PAX