2017-06-27 1 views
0

MISE À JOURVBA Mise en forme conditionnelle avec « ET » équation

Nous vous remercions de l'aide. J'ai mis à jour mon code pour ressembler à:

Sub AddColor() 

With Sheet1.Range("$T$3:$T$3600").FormatConditions 

    .Delete 
    With .Add(xlExpression, Formula1:="=AND(($Q3+7)<=TODAY(),$Q3>0,$T3="""")") 
    .Interior.Color = RGB(0, 176, 240) 
    .StopIfTrue = False 
    End With 
    With .Add(xlExpression, Formula2:="=AND(($Q3+14)<=TODAY(),$Q3>0,$T3="""")") 
    .Interior.Color = RGB(255, 0, 0) 
    .StopIfTrue = True 
End With 
End With 

With Sheet1.Range("$U$3:$U$3600").FormatConditions 
    .Delete 
    With .Add(xlExpression, Formula1:="=AND(($S3-1)<=TODAY(),$S3>0,$U3="""")") 
    .Interior.Color = RGB(0, 176, 240) 
    .StopIfTrue = False 
    End With 
    With .Add(xlExpression, Formula2:="=AND(($T3+1)<=TODAY(),$U3="""",$T3>0)") 
    .Interior.Color = RGB(255, 0, 0) 
    .StopIfTrue = True 

End With 
End With 
'Code continues 

Je reçois maintenant une erreur « Argument non facultatif » et il semble se référer à ma ligne « formula2 » sur la première série de déclarations. Je ne suis pas sûr de l'argument qui manque, car il fonctionne correctement pour la première déclaration. J'ai essayé de sauter la deuxième formule et il a la même erreur pour le prochain ensemble d'arguments.

C'est probablement quelque chose de simple, mais toute aide est appréciée!

MISE À JOUR

Je suis en train d'ajouter le formatage conditionnel par VBA, mais je suis en cours d'exécution dans quelques problèmes avec mon code. Je voudrais pouvoir le faire à travers la fonction de mise en forme conditionnelle, mais les données qui vont être importées nécessitent que je divise les colonnes, ce qui provoque le changement des cellules de référence, mais le formatage conditionnel ne semble pas le garder comme je veux c'est (longue histoire). Quoi qu'il en soit, j'en ai environ 10 de plus pour mettre en forme l'information dans les colonnes correspondantes et j'essaie juste de comprendre pourquoi je continue à recevoir une erreur. Voici ce que j'ai:

Sub AddColor() 
With Sheet1.Range("$T$3:$T$3600") 

    .FormatConditions.Add xlExpression, Formula1:="=AND(($Q3+7) 
<=TODAY(),$Q3>0,$T3="")" 
    .FormatConditions(1).Interior.Color = RGB(0, 176, 240) 
    .FormatConditions(1).StopIfTrue = False 
    .FormatConditions.Add xlExpression, Formula2:="=AND(($Q3+14) 
<=TODAY(),$Q3>0,$T3=0)" 
    .FormatConditions(2).Interior.Color = RGB(255, 0, 0) 
    .FormatConditions(2).StopIfTrue = True 
End With 

With Sheet1.Range("$U$3:$U$3600") 
    .FormatConditions.Add xlExpression, Formula1 = "=AND(($S3-1 
<=TODAY(),$S3>0,$U3="")" 
    .FormatConditions(3).Interior.Color = RGB(0, 176, 240) 
    .FormatConditions(3).StopIfTrue = False 
    .FormatConditions.Add xlExpression, Formula2 = "=AND(($T3+1) 
<=TODAY(),$U3="",$T3>0)" 
    .FormatConditions(4).Interior.Color = RGB(255, 0, 0) 
    .FormatConditions(4).StopIfTrue = True 

End With 

(la partie < = TODAY() est une continuation i mon code, juste sauté à la ligne suivante en raison du formatage.) Qu'est-ce que je fais mal? Toute assistance sera grandement appréciée!

+0

J'ai répondu à ma propre question.Le problème que j'ai eu, c'est qu'après chaque "End With", il veut que la prochaine formule soit encore étiquetée "Formula1" au lieu d'utiliser "Formula2" dans la même gamme. – Charlie

Répondre

2

Votre déclaration

.FormatConditions.Add xlExpression, Formula1:="=AND(($Q3+7)<=TODAY(),$Q3>0,$T3="")" 

tente de dire Excel à utiliser une formule de =AND(($Q3+7)<=TODAY(),$Q3>0,$T3="). C'est syntaxiquement incorrect, car il n'y a pas de devis de clôture pour la partie qui commence $T3=".

Vous devez échapper à toutes les guillemets doubles (") dans les littéraux de chaîne dans le code VBA en utilisant deux guillemets doubles (à savoir "") pour chacun que vous voulez réellement dans la chaîne.

Je crois que vous voulez que votre code soit:

Sub AddColor() 
With Sheet1.Range("$T$3:$T$3600") 
    .FormatConditions.Add xlExpression, Formula1:="=AND(($Q3+7)<=TODAY(),$Q3>0,$T3="""")" 
    .FormatConditions(1).Interior.Color = RGB(0, 176, 240) 
    .FormatConditions(1).StopIfTrue = False 
    .FormatConditions.Add xlExpression, Formula2:="=AND(($Q3+14)<=TODAY(),$Q3>0,$T3=0)" 
    .FormatConditions(2).Interior.Color = RGB(255, 0, 0) 
    .FormatConditions(2).StopIfTrue = True 
End With 

With Sheet1.Range("$U$3:$U$3600") 
    .FormatConditions.Add xlExpression, Formula1:="=AND(($S3-1)<=TODAY(),$S3>0,$U3="""")" 
    .FormatConditions(3).Interior.Color = RGB(0, 176, 240) 
    .FormatConditions(3).StopIfTrue = False 
    .FormatConditions.Add xlExpression, Formula2:="=AND(($T3+1)<=TODAY(),$U3="""",$T3>0)" 
    .FormatConditions(4).Interior.Color = RGB(255, 0, 0) 
    .FormatConditions(4).StopIfTrue = True 
End With 
2

Outre les corrections apportées par YowE3K, je vous suggère de faire quelques autres améliorations. La façon dont vous faites référence aux CF nouvellement ajoutés est dangereuse. Je suggère:

1- supprimer tout ancien CF avant d'ajouter de nouveaux dans la macro. Sinon, ils continueront à s'accumuler chaque fois que vous lancerez la macro et, par conséquent, leurs index ne seront pas ce que vous "pensez" qu'ils sont.

2- Reportez-vous explicitement à tout CF nouvellement ajouté au lieu de par index. Par exemple, dans la colonne U, vous les appelez .FormatConditions(3) et (4), ce qui est incorrect.

With Sheet1.Range("$U$3:$U$3600").FormatConditions 
    .Delete ' <--- delete old CF if any 
    With .Add(xlExpression, Formula1:="=AND(($S3-1)<=TODAY(),$S3>0,$U3="""")") 
    .Interior.Color = RGB(0, 176, 240) 
    .StopIfTrue = True 
    '... 
    End With 
    With .Add(xlExpression, Formula1:="=AND(($T3+1)<=TODAY(),$U3="""",$T3>0)") 
    .Interior.Color = RGB(255, 0, 0) 
    .StopIfTrue = True 
    '... 
    End With 
End with 

Appliquer la même méthode pour chaque CF que vous souhaitez ajouter, et ne pas oublier de « double-up » des guillemets doubles de votre formule que vous intégrez dans une chaîne VBA.

+0

C'est parfait! J'ai vu la légende supprimer dans quelques exemples, mais ils ne semblaient pas nécessaires. Tout à fait logique pourquoi j'ai besoin d'eux, cependant. En outre, la partie double quote. Je ne peux pas croire que j'ai raté ça. Très apprécié à vous deux !!! – Charlie