2009-07-14 9 views
3

Ich habe ein Programm erstellt, das eine benutzerdefinierte Dokumenteigenschaft in einer Excel 2007-Arbeitsmappendatei erstellt und füllt. Allerdings konnte ich den Wert dieser Eigenschaft in einer Arbeitsblattzelle nicht anzeigen. In Word 2007 können Sie einfach "Einfügen -> Quick Parts -> Feld ..." auswählen und das DocProperty-Feld verwenden, um den Wert des benutzerdefinierten Felds in einem Dokument anzuzeigen. Jedoch habe ich keine ähnliche Funktion in Excel 2007 gefunden.Angepassten Dokumenteigenschaftswert in Excel 2007-Arbeitsblattzelle anzeigen

Weiß jemand, wie der Wert einer benutzerdefinierten Dokumenteigenschaft in einer Excel-Arbeitsblattzelle angezeigt wird? Ich würde eine Lösung ähnlich der oben erwähnten Word 2007-Lösung bevorzugen. Ich verwende dafür keinen Makro/benutzerdefinierten Code.

Antwort

4

Leider glaube ich, dass Sie eine benutzerdefinierte Funktion verwenden müssen. Fügen Sie eine neue VBA-Modul zu Ihrer Arbeitsmappe und fügen Sie diese Funktion:

Function DocumentProperty(Property As String) 
    Application.Volatile 
    On Error GoTo NoDocumentPropertyDefined 
    DocumentProperty = ActiveWorkbook.BuiltinDocumentProperties(Property) 
    Exit Function 
NoDocumentPropertyDefined: 
    DocumentProperty = CVErr(xlErrValue) 
End Function 

Der Aufruf von Application.Volatile zwingt die Zelle auf jeder Neuberechnung aktualisiert werden, um sicherzustellen, dass es Änderungen in den Dokumenteigenschaften abholt.

+2

Danke für den Code! In meinem Fall musste ich anstelle der BuiltindocumentProperties() - Funktion die CustomDocumentProperties() - Funktion verwenden. – LeonZandman

+1

Bitte beachten Sie auch diese Anwendung.Volatile bewirkt nicht, dass die Formel bei einer Änderung der Dokumenteigenschaften neu berechnet wird, sondern nur bei anderen Zelländerungen. –

+0

Danke Goodgai! Das etwas zu berücksichtigen. – LeonZandman

3

Das Äquivalent in Excel wäre via Formel und ich glaube nicht, dass es möglich ist, eine Dokumenteigenschaft ohne Code zu extrahieren. Es gibt keine nativen Funktionen, um Dokumenteigenschaften auszuwählen. (Eine Alternative könnte sein, Informationen zu speichern, in der Arbeitsmappe/Arbeitsblatt Namen, die über Formel zugänglich sind)

In VBA würden Sie eine Funktion so etwas wie schaffen müssen:

Public Function CustomProperty(ByVal prop As String) 

    CustomProperty = ActiveWorkbook.CustomDocumentProperties(prop) 

End Function 

und es dann in einem Aufruf Formel mit =CustomProperties("PropertyName").

Es gibt einen weiteren subtilen Punkt. Formelabhängigkeiten beziehen sich nur auf andere Zellen; Diese Formel hängt von einer benutzerdefinierten Eigenschaft ab. Wenn Sie die benutzerdefinierte Eigenschaft aktualisieren, wird eine bereits vorhandene Formel mit CustomProperty nicht automatisch aktualisiert. Die Zelle muss manuell neu bewertet werden oder die gesamte Arbeitsmappe wird durch eine Neukalibrierung erzwungen. Ihre beste Chance wäre, die Funktion volatil zu machen, was bedeutet, dass die Formel bei jeder Zellenänderung neu berechnet wird - aber das bedeutet immer noch, dass Sie nur eine Aktualisierung erhalten, wenn eine Zelle geändert wurde.

0

Sie können einen benannten Bereich mit einer benutzerdefinierten Eigenschaft verknüpfen, aber die benutzerdefinierte Eigenschaft gibt dann den Wert der [ersten Zelle im] Bereich wieder. Es ist effektiv nur lesbar; Sie können den Inhalt der Zelle ändern, um die Eigenschaft zu aktualisieren, aber nicht umgekehrt.

Ich weiß, Sie möchten es vermeiden, aber wenn Sie den Wert der Eigenschaft in einer Formel verwenden möchten, müssen Sie create a custom worksheet function dies tun.

1

Wählen Sie die Zelle aus, die Sie extrahieren möchten. Benennen Sie die Zelle um. Von "B1" bis "Project_Number". Öffnen Sie "Erweiterte Eigenschaften" klicken Sie auf die Registerkarte "Benutzerdefiniert". Geben Sie einen Namen für die neue Eigenschaft ein. Klicken Sie auf "Link zum Inhalt" und wählen Sie den Zellennamen aus der Pulldown-Liste "Wert".

Ich wünschte, ich cerdit nehmen könnte, aber ich fand die Antwort online: http://pdmadmin.com/2012/03/displaying-custom-property-values-in-excel-using-a-named-range/

+0

Ich glaube, dass dies das Gegenteil dessen macht, was die Frage stellt. Diese Lösung wird die Eigenschaft basierend auf dem Inhalt in der Arbeitsmappe festlegen. Die Frage ist, wie die Eigenschaft als Inhalt der Arbeitsmappe ausgegeben wird. Aber das ist ein netter Trick, wenn Sie das Problem auf diese Weise angehen müssen. –

0

ich dies die Sharepoint-Eigenschaften für die Extraktion verwendet (basierend auf Martins Antwort):

Public Function DocumentProperty(Property As String) 
    Application.Volatile 
    On Error GoTo NoDocumentPropertyDefined 

    DocumentProperty = ActiveWorkbook.ContentTypeProperties(Property).Value 
Exit Function 

NoDocumentPropertyDefined: 
    DocumentProperty = CVErr(xlErrValue) 
End Function 
Verwandte Themen