Wow. Vous aimez les questions complexes et superposées.
Le premier problème est d'accéder à la valeur, ce qui ne se fait pas aussi directement que vous l'avez décrit. En fait, vous utilisez un Describe() pour obtenir la valeur. Le seul problème avec cela est qu'elle revient sous forme de chaîne dans le format suivant, avec des guillemets autour (notez que nous utilisons la notation de chaîne PowerScript standard où ~t est un onglet)
"~t"
Vous voulez l'expression, donc vous devrez la découper, en supprimant également les guillemets.
Une fois que vous avez l'expression, vous devrez l'évaluer pour la ligne donnée. Cela peut être fait avec un autre appel à Describe(), en particulier :
Describe ("Evaluate('', )")
Le numéro de ligne sur lequel une expression est évaluée peut être obtenu avec la fonction GetRow().
Cela peut sembler nécessiter PowerScript et un stockage de valeur intérimaire, mais tant que vous êtes prêt à effectuer des appels de fonction redondants pour obtenir une valeur donnée plus d'une fois, vous pouvez le faire dans une expression, quelque chose comme (pour une colonne d'exemple b) :
if (Describe("Evaluate (~"" + Mid(Describe("b.protect"), Pos(Describe("b.protect"), "~t")+1, Len(Describe("b.protect")) - Pos(Describe("b.protect"), "~t") - 1) + "~", " + String(GetRow()) + ")")='1', rgb(128, 128, 128), rgb(255,255,255))
Cela semble complexe, mais si vous mettez l'expression Mid() dans un champ calculé pour que vous puissiez voir le résultat, vous verrez que cela extrait simplement l'expression de protection et la place dans la syntaxe Describe(Evaluate()) décrite ci-dessus.
J'ai mis une astuce dans mon code pour la simplicité. J'ai utilisé le fait que je n'avais que des guillemets simples dans mon expression Protect, et ai choisi de mettre la chaîne d'expression Evaluate() entre guillemets doubles. Si j'essayais de le faire de manière générique pour n'importe quelle colonne, et que je ne pouvais pas supposer l'absence de guillemets doubles dans mon expression Protect, j'aurais utilisé une fonction globale pour remplacer tous les guillemets doubles dans l'expression Protect par des guillemets échappés (~"), ce que je crois dans votre code ressemblerait à trois tilde et un guillemet. D'un autre côté, si je devais appeler une fonction globale (notez que les appels de fonction globale dans les expressions peuvent avoir un impact significatif sur les performances s'il y a beaucoup de lignes), je lui passerais simplement le Describe("column.protect") et GetRow() et construirais toute l'expression en PowerScript, ce qui serait plus facile à comprendre et à maintenir.
Bonne chance,
Terry.