Affichage de la valeur de propriété de document personnalisé dans la cellule de feuille de calcul Excel 2007

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

Question

J'ai créé un programme qui crée et alimente une propriété de document personnalisé dans un fichier de classeur Excel 2007. Cependant, je ne l'ai pas été en mesure de démontrer la valeur de cette propriété dans une cellule de feuille de calcul. Dans Word 2007, vous pouvez simplement sélectionner « Insertion -> Pièces rapides -> terrain ... » et utiliser le champ DocProperty pour montrer la valeur du champ personnalisé dans un document. Cependant, je ne l'ai pas trouvé une fonction similaire dans Excel 2007.

Quelqu'un sait-il comment afficher la valeur d'un document propriété personnalisée dans une cellule de feuille de calcul Excel? Je préférerais une solution similaire à la solution Word 2007 mentionné ci-dessus. Je préfère ne pas utiliser un code macro / personnalisé pour cela.

Était-ce utile?

La solution

Malheureusement, je crois que vous devez utiliser une fonction définie par l'utilisateur. Ajouter un nouveau module VBA dans votre classeur et ajoutez cette fonction:

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

L'appel à Application.Volatile force la cellule à être mis à jour à chaque recalcul assurant qu'il reprendra les changements dans les propriétés du document.

Autres conseils

L'équivalent dans Excel serait par la formule et je ne pense pas qu'il est possible d'extraire une propriété de document sans code. Il n'y a pas des fonctions natives pour choisir les propriétés du document. (Une alternative pourrait être de stocker des informations dans le classeur / feuille de calcul noms, accessibles par la formule)

Dans VBA vous auriez à créer une fonction de quelque chose comme:

Public Function CustomProperty(ByVal prop As String)

    CustomProperty = ActiveWorkbook.CustomDocumentProperties(prop)

End Function

puis l'appeler dans une formule avec =CustomProperties("PropertyName").

Il y a un autre point subtil. dépendances de formule ne portent que sur d'autres cellules; cette formule dépend d'une propriété personnalisée. Si vous mettez à jour la propriété personnalisée une formule pré-existante impliquant CustomProperty ne sera pas mis à jour automatiquement. La cellule devra être réévalué manuellement ou le classeur entier forcé par un recalcul. Votre meilleure chance serait de rendre la fonction volatile, ce qui signifie que la formule serait recalc'd à chaque changement de cellule -. Mais cela signifie encore que vous obtenez seulement une mise à jour si elle a été changé une cellule

Sélectionnez la cellule que vous voulez extraire Renommer la cellule à certains utile. De "B1" à "Project_Number". Ouvrez « Propriétés Advance », cliquez sur l'onglet « Personnalisé ». Entrez un nom pour la nouvelle propriété. cliquez sur « Créer un lien vers le contenu » de la sélection du nom de la cellule de l'attraction « Value » dans la liste déroulante.

Je voudrais pouvoir prendre cerdit mais je trouve la ligne de réponse: http: // pdmadmin. com / 2012/03 / affichage-commande-valeurs des propriétés en Excel utilisant-un-plage nommée /

Vous pouvez lier une plage nommée à une propriété personnalisée, mais la propriété personnalisée reflète la valeur de la [première cellule de la] gamme. Il est efficace en lecture seule; vous pouvez modifier le contenu de la cellule à mettre à jour la propriété, mais pas l'inverse.

Je sais que vous voulez éviter, mais si vous souhaitez utiliser la valeur de la propriété dans une formule, vous devrez créer une fonction de feuille de calcul personnalisé pour le faire.

Je l'ai connu les mêmes problèmes que les autres ont. Je vais donc essayer de couvrir complètement la façon dont je répondu.

Tout d'abord, vous avez pas d'autre choix que d'écrire une fonction destinée à obtenir tout ce que vous mettez dans une coutume ou propriété intégrée et rendre la cellule « problème » au point de cette façon:

=yourPropertyGettingFunctionName(PropertyName)

PropertyName étant une chaîne faisant référence au nom de la coutume / propriété intégrée dont la valeur que vous souhaitez afficher dans la cellule.

La fonction peut être écrite (comme suggéré précédemment) comme:

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

pour une propriété intégrée, ou comme:

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

Comme nous l'avons mentionné, y compris Application.Volatile permettra une mise à jour du contenu de la cellule semi-automatique.

Cependant, cela pose un problème sur son propre: chaque fois que vous ouvrez votre fichier Excel, toutes les cellules en utilisant une telle relation sera mise à jour et, au moment où vous quittez le fichier, Excel vous demandera votre permission de le mettre à jour , peu importe si vous ne présenter aucun changement à ce sujet ou non, parce que Excel lui-même fait.

Dans mon groupe de développement, nous utilisons SubVersion comme un système de contrôle de version. Dans le cas où vous avez accidentellement frappé « mise à jour » à la sortie, SVN remarquerez et la prochaine fois que vous souhaitez valider vos modifications, le fichier Excel sera inclus dans le pack.

Je décide donc d'utiliser tout à portée de main pour faire tout ce que je avais besoin et d'éviter, en même temps, cet effet d'auto-mise à jour je ne voulais pas.

Cela signifie que l'utilisation des plages nommées en combinaison avec la fonction accès à la propriété / s. Compte tenu du fait que je ne peux pas attendre de vieux dossiers d'avoir provision pour mes besoins nouveaux, je l'ai écrit cette fonction:

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

Il permet une sélection appropriée de la cellule de destination. Lors de l'attribution des valeurs à une propriété (disons « Auteur », qui se trouve être un intégré), mettre à jour également la valeur stockée dans la plage nommée, et peut écrire dans une cellule:

=Author

si j'arrive d'avoir défini une plage nommée « Auteur » et rempli sa cellule « A1 » avec la valeur de la propriété intégrée « Auteur », que je dois d'avoir mis à jour pour nos propres fins de suivi externes.

Tout cela n'a pas eu lieu du jour au lendemain. J'espère que cela peut être un peu d'aide.

J'ai utilisé ce pour extraire les propriétés SharePoint (en fonction de la réponse de 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top