AW: Custom Document Properties in Word Dokument finden
21.08.2009 02:46:58
fcs
Hallo FetterTiger,
hier mal ein Beispiel, das zumindest bei mir funktioniert. Word muss vor dem Start des Makros geöffnet sein.
Alternativ kann man wohl auch ein Application-Objekt kreieren, dann muss man natürlich darauf achten, das dieses immer korrekt geschlossen und beendet wird (Quit), um den Speicher nicht zuzumüllen.
Gruß
Franz
'Erstellt mit Excel 2007, Windows Vista
'Im VBA-Editor die Verweise zusätzlich setzen auf _
Microsoft Word x.y Object Library und _
Microsoft Office z.x Object Library
Sub Wordproperties()
Dim objDoc As Word.Document, objDocProperty As Object 'Word.CustomProperty
Dim strPropertyName As String, varPropertyValue, propertyType As Long
Dim wks As Worksheet, lngZeile As Long, lngSpalte As Long
Set wks = ActiveSheet
'Documente in Spalte 1 öffnen und CustomDocumentproperties anpassen/ergänzen
For lngZeile = 2 To wks.Cells(1, 1).End(xlDown).Row
'Worddatei in Spalte 1 öffnen
Set objDoc = Word.Application.Documents.Open(Filename:=ActiveWorkbook.Path _
& Application.PathSeparator & wks.Cells(lngZeile, 1))
' Application.ActivateMicrosoftApp (xlMicrosoftWord)
'Custom Properties in Spalten 2 bis 7 prüfen, eintragen und/oder ergänzen
For lngSpalte = 2 To 7
strPropertyName = wks.Cells(1, lngSpalte) 'Propertyname aus Zeile 1 lesen
varPropertyValue = wks.Cells(lngZeile, lngSpalte) 'Propertywert aus Zeile lesen
'CustomProperty im Document suchen
For Each objDocProperty In objDoc.CustomDocumentProperties
'Namen vergleichen
If objDocProperty.Name = strPropertyName Then
'Werte aus Excel zuweisen
objDocProperty.Value = varPropertyValue
Exit For
End If
Next objDocProperty
If objDocProperty Is Nothing Then
'fehlende CustomProperty im Dokument ergänzen
'Typ für einzufügende Eigenschaft festlegen
propertyType = msoPropertyTypeString 'Standardwert
Select Case strPropertyName
Case "XYZ"
propertyType = msoPropertyTypeDate
Case "XXZ"
propertyType = msoPropertyTypeBoolean
Case "TestProp"
propertyType = msoPropertyTypeString
Case "TestProp2", "TestProperty"
propertyType = msoPropertyTypeNumber
End Select
'CustomProperty im Wordokument einfügen und Name/Wert/Type zuweisen
objDoc.CustomDocumentProperties.Add Name:=strPropertyName, _
LinkToContent:=False, Value:=varPropertyValue, Type:=propertyType
End If
Next lngSpalte
objDoc.Saved = False 'sehr wichtig - die Anpassungen der Documentproperties im _
Worddokument ändern den Saved-Status nicht auf False
objDoc.Save
objDoc.Close
Next lngZeile
Set objDoc = Nothing: Set objDocProperty = Nothing: Set wks = Nothing
Excel.Application.WindowState = xlMaximized
Word.Application.WindowState = wdWindowStateMinimize
End Sub