Visualizzazione personalizzata valore della proprietà documento in Excel 2007 cella del foglio

StackOverflow https://stackoverflow.com/questions/1124294

Domanda

Ho creato un programma che crea e popola una proprietà personalizzata del documento in un file di cartella di lavoro di Excel 2007. Tuttavia non sono stato in grado di mostrare il valore di questa proprietà in una cella del foglio di lavoro. In Word 2007 si può semplicemente selezionare "Inserisci -> Parti rapide -> campo ..." e utilizzare il campo DocProperty per mostrare il valore del campo personalizzato in un documento. Tuttavia non ho trovato una funzione simile in Excel 2007.

Qualcuno sa come visualizzare il valore di una proprietà personalizzata del documento in una cella di foglio di lavoro Excel? Io preferirei una soluzione simile alla soluzione di Word 2007 di cui sopra. Io invece non uso un codice di macro / personalizzato per questo.

È stato utile?

Soluzione

Purtroppo credo che è necessario utilizzare una funzione definita dall'utente. Aggiungere un nuovo modulo VBA per la cartella di lavoro e aggiungere questa funzione:

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

La chiamata alla Application.Volatile costringe la cella da aggiornare in ogni ricalcolo assicurando che prenderà cambiamenti nelle proprietà del documento.

Altri suggerimenti

L'equivalente in Excel sarebbe via formula e non credo che sia possibile estrarre una proprietà del documento senza codice. Non ci sono funzioni native di cogliere le proprietà del documento. (Un'alternativa potrebbe essere quella di memorizzare le informazioni in cartella di lavoro / foglio di lavoro Nomi, accessibili da formula)

In VBA dovreste creare una funzione di qualcosa di simile a:

Public Function CustomProperty(ByVal prop As String)

    CustomProperty = ActiveWorkbook.CustomDocumentProperties(prop)

End Function

e quindi chiamare in una formula con =CustomProperties("PropertyName").

C'è un altro punto sottile. dipendenze formula riferiscono solo ad altre cellule; questa formula dipende da una proprietà personalizzata. Se si aggiorna la proprietà personalizzata una formula che coinvolge CustomProperty pre-esistente non verrà aggiornata automaticamente. La cella dovrà essere rivalutati manualmente o l'intera cartella di lavoro forzato attraverso un ricalcolo. La vostra migliore possibilità sarebbe quella di rendere la funzione volatile, il che significa che la formula sarebbe recalc'd su ogni cambiamento delle cellule -., Ma questo significa che ancora si ottiene solo un aggiornamento se una cellula è stato modificato

Selezionare la cella che si desidera estrarre Rinominare la cella per alcuni utili. Da "B1" a "Project_Number". Aprire "Proprietà Advance" fare clic sulla scheda "Personalizzata". Inserire un nome per la nuova proprietà. fare clic su "Link al contenuto" Selezionare il nome della cella del "Valore" a discesa.

Vorrei poter prendere cerdit ma ho trovato la risposta on-line: http: // pdmadmin. / 2012/03 / com visualizzazione--proprietà-valori personalizzati-in-excel-con-un-nome-range /

È possibile collegare un intervallo denominato per una proprietà personalizzata, ma poi la proprietà personalizzata riflette il valore del [prima cella] gamma. E 'efficace solo lettura-; è possibile modificare il contenuto della cella per aggiornare la proprietà, ma non viceversa.

Lo so che vuole evitare di usarlo, ma se si desidera utilizzare il valore della proprietà in una formula, avrai a creare una funzione del foglio di lavoro personalizzato per farlo.

ho sperimentato gli stessi problemi che altre persone hanno. Quindi cercherò di coprire ampiamente come ho affrontato esso.

Prima di tutto, non hai altra scelta che scrivere una funzione destinata a ottenere ciò che si mette in un costume o di proprietà incorporata e rendere la cellula "problema" per puntare in questo modo:

=yourPropertyGettingFunctionName(PropertyName)

PropertyName è una stringa riferimento al nome del custom / built-in proprietà il cui valore si desidera essere mostrato nella cella.

La funzione potrebbe essere scritta (come precedentemente suggerito) come:

Public Function StdProp(ByVal sPropName As String) As String
    Application.Volatile
    StdProp = ActiveWorkbook.BuiltinDocumentProperties(sPropName).Value
End Function

per un built-in di proprietà, o come:

Public Function UsrProp(ByVal sPropName As String) As String
    Application.Volatile
    On Error GoTo UndefinedProp
    UsrProp = ActiveWorkbook.CustomDocumentProperties(sPropName)
    GoTo Exit
UndefinedProp:
    UsrProp  = "n/a"
Exit:
End Function

Come già accennato, compreso Application.Volatile consentirà un aggiornamento semiautomatico contenuto delle celle.

Tuttavia, questo pone un problema di per sé: ogni volta che si apre il file di Excel, tutte le cellule utilizzando un tale rapporto viene aggiornata e, per il momento si esce il file, Excel vi chiederà il permesso per aggiornarlo , non importa se si ha introdotto alcun cambiamento su di esso o no, perché Excel stesso ha fatto.

Nel mio gruppo di sviluppo, usiamo Subversion come un sistema di controllo versione. Nel caso in cui inavvertitamente colpito "aggiornamento" in uscita, SVN se ne accorgeranno e la prossima volta che si desidera confermare le modifiche, il file excel sarà incluso nella confezione.

Così ho deciso di usare tutto a portata di mano per fare tutto ciò di cui avevo bisogno e di evitare, al tempo stesso, questo effetto di auto-aggiornamento non volevo.

Questo significa che utilizzando intervalli denominati in combinazione con la proprietà si accede la funzione / s. Dato il fatto che non posso aspettare i vecchi file di avere disposizione per le mie nuove esigenze, ho scritto questa funzione:

Private Function RangeAssign(sRange As String, sValue As String) As Integer
Dim rDest As Range
    If RangeCheck(sRange) Then
        Set rDest = Range(sRange)
    Else
        Set rDest = Application.InputBox(sMsg + vbCrLf + vbCrLf + _
            "Please, select a cell to get" + vbCrLf + _
            "the name " + sRange + " assigned", sCopyRight, Type:=8)
        rDest.Name = sRange
    End If

    rDest.Cells(1, 1).NumberFormat = "@"
    rDest.Cells(1, 1).Value = sValue

    RangeAssign = True

End Function

Si consente una corretta selezione della cella di destinazione. Quando si assegnano i valori a una proprietà (diciamo "Autore", che sembra essere un built-in uno), ho anche aggiornare il valore memorizzato nell'intervallo denominato, e in grado di scrivere in una cella:

=Author

se mi capita di aver definito un intervallo denominato "Autore" e riempito la sua cella "A1" con il valore per la proprietà incorporata "Autore", che ho bisogno di avere aggiornato per i nostri scopi di monitoraggio esterni.

Tutto questo non è accaduto durante la notte. Spero che possa essere di qualche aiuto.

Ho usato questo per estrarre le proprietà di SharePoint (in base alla risposta di Martin):

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top