For 循环填充 Interior.ColorIndex 除非单元格为空白

问题描述 投票:0回答:1

我正在制作一个宏命令按钮,根据预计日期(col“X”)是在实际日期(col“Y”)之前、等于还是之后为范围的单元格着色。 它工作得很好,直到我尝试引入默认值,即没有内部颜色和文本“不完整”。

Sub ColorChangeTATDates()

Dim lr As Long
lr = Sheet1.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row

Dim i As Long, projected As Range, actual As Range
For i = 3 To lr
  Set projected = Range("X" & i)
  Set actual = Range("Y" & i)
  If actual.Value = " " Then actual.Interior.ColorIndex = 0 And actual.Cells.Value = "not complete"
  If actual.Value < projected.Value Then actual.Interior.ColorIndex = 8
  If actual.Value >= projected.Value Then actual.Interior.ColorIndex = 4
  Debug.Print (projected.Value)
  Debug.Print (actual.Value)
Next i

End Sub

发生了什么: 所有空单元格都会变成蓝色。 “不完整”不会打印到空单元格。

我需要修改我的循环,基本上将“Y”范围单元格值设置为“不完整”并且不填充(我觉得我不应该指定),直到满足某些条件。但我仍然是一个婴儿编码员,所以我在格式化它时遇到了麻烦,而不让它变得比需要的更复杂。

vba for-loop macros conditional-formatting commandbutton
1个回答
0
投票

这一行:

 If actual.Value = " " Then actual.Interior.ColorIndex = 0 And actual.Cells.Value = "not complete"

实际上读起来是这样的:

If actual.Value = " " Then actual.Interior.ColorIndex = (0 And actual.Cells.Value = "not complete")

这可以纠正类似的事情

If actual.Value = " " Then actual.Interior.ColorIndex = (FALSE And FALSE)

或者类似的东西。无论如何,当

if
条件为真时,您希望运行两行代码,因此您需要使用
if
块而不是单行代码:

If actual.Value = " " Then 
   actual.Interior.ColorIndex = 0 
   actual.Cells.Value = "not complete"
End If

您可能还想检查

If actual.Value = " " Then
行,因为
" "
是一个文字空格字符。空单元格将是
""

© www.soinside.com 2019 - 2024. All rights reserved.