更新
感谢您的帮助。我已将代码更新为:
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
我现在收到一条错误,上面写着“Argument Not Optional”,它似乎是指第一组语句中的“Formula2”行。我不确定缺少什么参数,因为它对第一个语句正常工作。我试图跳过第二个公式,它对于下一个参数集有相同的错误。
这可能很简单,但感谢任何帮助!
更新
我正在尝试通过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
(&lt; = TODAY()部分是我的代码的延续,由于格式化,它只是跳转到下一行。)我做错了什么?非常感谢任何帮助!
答案 0 :(得分:2)
您的陈述
.FormatConditions.Add xlExpression, Formula1:="=AND(($Q3+7)<=TODAY(),$Q3>0,$T3="")"
正试图让Excel使用公式=AND(($Q3+7)<=TODAY(),$Q3>0,$T3=")
。这在语法上是不正确的,因为开始$T3="
的部分没有结束引用。
您需要在VBA代码中的字符串文字中转义所有双引号("
),方法是对字符串中实际需要的每个字符使用两个双引号(即""
)。
我相信你希望你的代码是:
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
答案 1 :(得分: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
对要添加的每个CF应用相同的方法,并且不要忘记“加倍”嵌入VBA字符串中的公式的双引号。