Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1096to1100
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Custom Document Properties in Word Dokument finden

Custom Document Properties in Word Dokument finden
Fettertiger
Hallo zusammen,
aus Excel heraus versuche ich in einem Word Document die "Custom Document Properties" zu setzen bzw zu ändern. Dazu habe ich im Netz schon viele Ansätze gefunden, die im Prinzip über "for each" abprüfen ob die Eigenschaft gesetzt ist. Eine Möglichkeit habe ich in dieser Funktion gefunden, die aber wohl für Excel eigenschaften heraus gedacht ist.
Function CheckCDP(pStr_Name As String)
Dim objDocProp As DocumentProperty
'' Set default return value
CheckCDP = False
'' Loop through all properties
For Each objDocProp In doc.DocumentProperties
'' If it's found, return TRUE and exit
If pStr_Name = objDocProp.Name Then
CheckCDP = True
Exit Function
End If
Next
End Function
Scheinbar bin ich wohl zu blöd die Variable richtig zu deklarieren, denn ich bekomme immer einen Fehler beim ersten if, wegen Typenunverträglichkeit. Ich vermute meine Deklaration müßte sowas wie "Word.documentproperty" sein.
doc ist übrigens das Word dokument - im Modul deklariert.
Hat jemand von Euch eine Idee?
Danke und Gruss
Fettertiger

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Custom Document Properties in Word Dokument finden
19.08.2009 17:32:57
Fettertiger
habe die Variable gerade als Object deklariert - funzt!!!
Trotzdem Danke an alle, die sich schon über meine blödheit amüsiert haben :-)
Gruss
Fettertiger
AW: Custom Document Properties in Word Dokument finden
20.08.2009 11:48:18
Fettertiger
Zu früh gefreut!
Die Deklaration als Objekt funktioniert zwar, allerdings bekomme ich bei jedem zweiten Ausführen die Fehlermeldung:
Laufzeitfehler '462': Der Remote-Server-Computer existiert nicht oder ist nicht verfügbar.
Googel hat mir folgenden Tipp gebracht:
http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0412.shtml

Ursache der Fehlermeldungen:
Auf Grund eines Zugriffs auf ein Word-Objekt, eine -Methode oder -Eigenschaft ohne einen
gültigen Objektverweis, hat Visual Basic einen Verweis zu Word eingerichtet, der erst wieder
freigegeben wird, wenn das Programm beendet wird.
Dieser fehlerhafte Verweis verursacht die obigen Fehlermeldungen, wenn der Code mehr als einmal ausgeführt wird >
Also bin ich wieder bei meinem alten Problem.
Hat vielleicht noch jemand eine Idee?
Danke und Gruss
Fettertiger
Anzeige
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

Anzeige
AW: Custom Document Properties in Word Dokument finden
21.08.2009 09:34:02
Fettertiger
Hallo Franz,
vielen Dank für den Code. Die Deklaration ist im Prinzip genauso wie ich das auch gemacht hatte, das Word dokument wird bei mir aber schon in einem anderen Macro geöffnet.
Gestern abend hatte ich aber doch noch die zündende Idee: Das ganze Konstrukt war ja eigentlich nur gedacht um eine Custom Doc Property "Path" zu ändern, falls diese bereits existierte, und falls nicht diese neu anzuglegen.
Die neue Logik versucht deshalb erst mal die CDP "Path" zu löschen (falls diese nicht exstierte springe ich einfach mit on error resume next drüber) - danach lege ich sie auf jeden Fall neu an.
Hier das Code - sniplet
Sub CDP()
Dim app As New Word.Application
Dim doc As Word.Document
Set doc = app.Documents.Add(CStr(S01.Range("C24")))
app.Visible = True
doc.Select
On Error Resume Next
doc.CustomDocumentProperties("Path").Delete
Err.clear
With doc
.CustomDocumentProperties.Add Name:="Path", _
Type:=msoPropertyTypeString, _
LinkToContent:=False, _
Value:=X09.Range("bz10").Value
End With
End Sub
Hätte ich eigentlich auch gleich drauf kommen können :-)
Gruss
Fettertiger
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige