Mise en forme conditionnelle Excel 2007 - comment obtenir la couleur de la cellule?
Supposons que j'ai la gamme suivante de (a1:c3)
A B C
1 -1 1 1
2 -1 0 0
3 0 0 1
Maintenant, j'ai sélectionné la plage suivante, et en mise en forme à l'aide de la mise en forme Conditionnelle (à l'aide de défaut rouge jaune vert couleur de l'échelle).... maintenant la gamme de couleurs est devenu
A B C
1 Green Red Red
2 Green Yellow Yellow
3 Yellow Yellow Red
Maintenant, je veux demander à la couleur de n'importe quelle cellule dans la gamme, par exemple MsgBox Range("A1").L'intérieur.Couleur
mais il ne dit pas que c'est Vert, pourquoi? Svp pouvez-vous m'aider?
Range("A1").L'intérieur.Couleur renvoie toujours 16777215
Range("A1").L'intérieur.ColorIndex retourne toujours -4142
(peu importe de savoir si la couleur de A1 est rouge, bleu, vert, ...)
Range("A1", "C3").FormatConditions.Le comte
ce retourne toujours 0, pourquoi?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
.L'intérieur.Couleur renvoie la "vraie" couleur, pas le conditionnel format résultat de couleur.
@sss: Il n'est pas disponible via l'API.
Le meilleur que vous pouvez faire est de tester les mêmes conditions que vous avez utilisé dans la mise en forme conditionnelle.
Pour éviter ce qui en résulte dans le code dupliqué, je suggère de déplacer vos critères conditionnels à un UDF. Exemples:
Ensuite utiliser ces formules dans votre mise en forme Conditionnelle:
Puis votre code, plutôt que de regarder les couleur des cellules, regarde pour voir si la condition est remplie:
Vous devez consulter le
<Cell>.FormatConditions(index that is active).Interior.ColorIndex
pour récupérer la mise en forme conditionnelle de la couleur d'une cellule.Vous pouvez consulter le lien ci-dessous pour un exemple:
http://www.xldynamic.com/source/xld.CFConditions.html#specific
Suivi de @richardtallent (désolé, je ne pouvais pas faire de commentaires), le lien suivant vous permet d'obtenir une fonction qui retourne l'index de la couleur par l'évaluation de la mise en forme conditionnelle pour vous.
http://www.bettersolutions.com/excel/EPX299/LI041931911.htm
Pour obtenir la couleur d'une cellule dans une Plage, vous avez besoin de faire référence à la cellule individuelle à l'intérieur du tableau dans le formulaire de Range("A1","C3").Cells(1,1) (pour la cellule A1). L'aide d'Excel est assez bon si vous recherchez le nom de la propriété que vous rencontrez des problèmes avec.
Aussi, Excel 2007 utilise des Entiers pour sa couleur de types, de sorte que votre meilleur pari est d'attribuer l'index de la couleur à un entier, et en utilisant que tout au long de votre programme. Pour votre exemple, essayez:
Et puis pour changer les couleurs de tous les rouges:
Encore une fois, vérifiez à l'aide d'Excel pour savoir comment utiliser les Cellules([RowIndex],[ColumnIndex]).
Si le ci-dessus ne fonctionne pas pour vous, vérifiez pour voir ce que .L'intérieur.PatternColorIndex est égal à. En général, je la laisser à xlAutomatic (de couleur unie), et il pourrait être quelque chose d'autre si la couleur n'est pas en train de changer.
Selon XlColorIndex Énumération
ColorIndex=-4142
signifie Pas de couleurPourquoi cela arrive, je suis paumé. La valeur retournée semble être la représentation décimale de la valeur RVB. La version améliorée de ce script pour déchiffrer la valeur en hexadécimal RVB notation
Il ne semble pas que la "mise en forme Conditionnelle"-couleur est disponible par programmation. Ce que je proposerais que, au lieu de cela, vous écrire une petite fonction qui calcule la couleur de la cellule, et puis il suffit de définir une macro à exécuter sur la cellule active à chaque fois que vous avez modifié la valeur. Par exemple (désolé pour le pseudo-code - je ne suis pas un expert VBA plus):
Bien que vous ne seriez pas en mesure d'utiliser le construit-dans la mise en forme Conditionnelle Excel, ce serait faire la même chose, et vous serez en mesure de lire la couleur de code. est-il logique?
depuis que je peut avoir plus de trois couleurs différentes dans un même temps... je n'ai pas trouvé la bonne façon de gérer cela avec une mise en forme conditionnelle par défaut de couleurs... j'ai fait de cette façon. alors à chaque fois que je demande la couleur de la cellule, j'ai récupérer la bonne couleur!
d_distinct détient toutes les valeurs distinctes dans une gamme... c est une Couleur[] qui tient couleurs distinctes pour chaque valeur distincte! ce code peut être facilement convertis en vb!