2017-06-27 1 views
0

UPDATEVBA Bedingte Formatierung mit "AND" Gleichung

Vielen Dank für die Hilfe. Ich habe meinen Code aktualisiert wie folgt aussehen:

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 

ich jetzt erhalte eine Fehlermeldung, die „Argument nicht optional“, sagt und es scheint auf den ersten Satz von Aussagen zu meiner „Formula2“ Linie unter Bezugnahme werden. Ich bin mir nicht sicher, welches Argument fehlt, da es für die erste Aussage korrekt funktioniert. Ich habe versucht, die zweite Formel zu überspringen, und es hat den gleichen Fehler für die nächste Menge für Argumente.

Es ist wahrscheinlich etwas einfaches, aber jede Hilfe wird geschätzt!

UPDATE

ich bedingte Formatierung durch VBA hinzufügen bin versucht, aber mit meinem Code in einigen Fragen leite. Ich würde gerne in der Lage sein, es durch die bedingte Formatierung Funktion zu tun, aber die Daten, die importiert werden, erfordert, dass ich spalte Spalten, wodurch die Referenzzellen zu ändern, aber bedingte Formatierung scheint es nicht zu halten, wie ich will es (lange Geschichte). Wie auch immer, ich habe ungefähr 10 weitere davon, um die Informationen in den entsprechenden Spalten zu formatieren und versuche nur herauszufinden, warum ich immer einen Fehler erhalte. Hier ist, was ich habe:

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 

(die < = HEUTE() Teil ist eine Fortsetzung i mein Code, es nur auf die nächste Zeile sprang aufgrund Formatierung.) Was mache ich falsch? Jede Hilfe wäre sehr willkommen!

+0

Ich beantwortete meine eigene Frage.Das Problem, das ich hatte, war, dass nach jedem "Ende mit" die nächste Formel immer noch als "Formel1" bezeichnet werden soll, anstatt "Formel2" innerhalb desselben Bereichs zu verwenden. – Charlie

Antwort

2

Ihre Aussage

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

versucht Excel zu sagen, eine Formel von =AND(($Q3+7)<=TODAY(),$Q3>0,$T3=") zu verwenden. Das ist syntaktisch falsch, da für den Teil, der $T3=" startet, kein Abschlusskurs existiert.

Sie müssen alle doppelten Anführungszeichen (") in Zeichenfolgenliteralen in VBA-Code durch Verwendung von zwei doppelten Anführungszeichen (d. H. "") für jeden, den Sie tatsächlich in der Zeichenfolge möchten.

Ich glaube, Sie Ihren Code sein wollen:

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

Neben den Korrekturen durch YowE3K, empfehle ich Ihnen ein paar andere Verbesserungen. Die Art, wie Sie sich auf die neu hinzugefügten CFs beziehen, ist gefährlich. Ich schlage vor:

1- löschen Sie alle alten CF vor dem Hinzufügen neuer CF im Makro. Sonst sammeln sie sich jedes Mal an, wenn Sie das Makro ausführen, und dementsprechend sind die Indizes nicht das, was Sie "denken".

2- explizit auf neu hinzugefügte CF anstelle von Index verweisen. Zum Beispiel beziehen Sie sich in der Spalte U auf sie als .FormatConditions(3) und (4), was falsch ist.

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 

Wenden Sie das gleiche Verfahren für jeden CF Sie hinzufügen möchten, und vergessen Sie nicht, in einem VBA-String zu „double-up“ einbetten, die Sie doppelte Anführungszeichen Ihrer Formel.

+0

Das ist perfekt! Ich habe den Löschtitel in einigen Beispielen gesehen, aber sie scheinen nicht benötigt zu werden. Völlig macht Sinn, warum ich sie brauche. Auch der doppelte Zitatteil. Ich kann nicht glauben, dass ich das verpasst habe. Vielen Dank für euch beide !!! – Charlie

Verwandte Themen