2017-06-27 74 views
0

UPDATEVBA条件付き書式 "AND" 式

は支援をいただき、ありがとうございます。私が見えるように自分のコードを更新しました:私は今、「引数は省略できません」というエラーを取得しています

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 

、それは文の最初のセットで私の「Formula2」の行を参照しているようです。最初のステートメントで正しく機能しているので、何が欠けているのか分かりません。私は2番目の式をスキップしようとしましたが、次のセットの引数については同じエラーがあります。

これはおそらく単純なものですが、助けてください!

UPDATE

私はVBAによる条件付き書式を追加しようとしていますが、私のコードでいくつかの問題に実行しています。私は条件付き書式設定関数を使用してそれを行うことができるようにしたいと思いますが、インポートされるデータには、参照セルを変更する列を分割する必要がありますが、条件付き書式設定では、それ(長い話)。とにかく、私は対応する列の情報を書式設定するためにこれらのうちの約10個を持っており、なぜ私はエラーが発生し続けるのかを理解しようとしています。

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 

(< = TODAY()の部分は、私は私のコードは、それだけで原因の書式に次の行にジャンプ続きです。)私が間違っているのか:ここで私が持っているものでしょうか?どんな支援も大歓迎です!

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

+0

私は自分の質問に答えました。私が持っていた問題は、それぞれの "End With"の後、同じ範囲内で "Formula2"を使用するのではなく、 "Formula1"とラベル付けされた次の式が欲しいということでした。 – Charlie

答えて

2

あなたの文は=AND(($Q3+7)<=TODAY(),$Q3>0,$T3=")の式を使用してExcelを伝えようとしています。 $T3="を開始する部分の終わりの引用符がないので、構文的に間違っています。

VBAコードの文字列リテラル内のすべての二重引用符(")を、実際に文字列内に必要な2つの二重引用符(つまり、"")を使用してエスケープする必要があります。

私はあなたのコードになりたいと考えている:

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

YowE3Kによって行われた修正に加えて、私はあなたが他のいくつかの改善を行う示唆しています。新しく追加されたCFを参照する方法は危険です。私はお勧めします:

1古いCFを削除してからマクロに新しいCFを追加します。それ以外の場合は、マクロを実行するたびに蓄積され続けるので、索引は自分が「考える」ものではありません。

2-インデックスではなく、新しく追加されたCFを明示的に参照します。たとえば、列Uでは、.FormatConditions(3)(4)と表示されていますが、これは正しくありません。

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 

追加すると、「ダブルアップ」あなたはVBA文字列の内側に埋め込むあなたの式の二重引用符を忘れないようにしたい各CFのために同じ方法を適用します。

+0

これは完璧です!私はいくつかの例でキャプションの削除を見ましたが、必要ではないようです。しかし、なぜ私はそれらが必要なのかを完全に理解しています。また、二重引用符部分。私はそれを逃したとは信じられません。あなたの両方に非常に感謝! – Charlie