基于IF的VBA颜色高亮显示

基于IF的VBA颜色高亮显示,vba,excel,Vba,Excel,所以我试着运行下面的代码。这应该是直截了当的,我不明白为什么它不起作用。如果电池b2为“John”,且电池O2为空,则O2应为红色。如果O2不为空,则不应着色 任何帮助都必须感谢 Sub columnO(d As Long) If Cells(d, "B") = "John" And Cells(d, "O") = "" Then Cells(d, "O").Interior.Color = RGB(255, 0, 0) Else Cells(d, "O").Inter

所以我试着运行下面的代码。这应该是直截了当的,我不明白为什么它不起作用。如果电池b2为“John”,且电池O2为空,则O2应为红色。如果O2不为空,则不应着色

任何帮助都必须感谢

Sub columnO(d As Long)

If Cells(d, "B") = "John" And Cells(d, "O") = "" Then    
    Cells(d, "O").Interior.Color = RGB(255, 0, 0)
Else
    Cells(d, "O").Interior.Color = RGB(1000, 1000, 1000)
End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Range("B10:O10000"), Target) Is Nothing Then
    columnO Target.Row
End If

End Sub

这可以通过条件格式轻松完成。只需从功能区的主菜单中选择条件格式-->新规则-->使用公式确定。。。和类型公式

=$B$2<>"John"
=$B$2“约翰”

然后您只需要设置所需的格式。如果需要,可以在公式中使用$切换以允许拖动和复制格式

这可以通过条件格式轻松完成。只需从功能区的主菜单中选择条件格式-->新规则-->使用公式确定。。。和类型公式

=$B$2<>"John"
=$B$2“约翰”

然后您只需要设置所需的格式。如果需要,可以在公式中使用$切换以允许拖动和复制格式

为什么不使用条件格式而不是VBA?
可能更容易管理

为什么不使用条件格式而不是VBA?
可能更容易管理

我不确定在我们不知道问题是什么的情况下,我们如何理解为什么它不工作?在修改单元格“B2”时,您希望查找单元格“B2”,但在您的
工作表\u Change
事件中,您查找的是
范围(“B10:O10000”)
,因此“B2”不会触发事件,因为您从第10行开始查看(而不是第2行)。问题是,如果我在单元格B2中写“John”,而单元格O2为空,它不会将单元格O2变为红色。@geogec请参阅我上面的评论,如果不是应用程序,则改为
。Intersect(范围(“B1:O10000”),Target)什么都不是。
@Shai Rado:是的,我现在将rage改为B2:O10000,但仍然不起作用。我不确定我们如何理解在不知道问题是什么的情况下它为什么不起作用?您希望在修改单元格“B2”时查找它,但在您的
工作表\u Change
事件中,您查找的是
范围(“B10:O10000”)
,因此“B2”不会触发该事件,因为您从第10行开始查看(而不是第2行)。问题是,如果我在单元格B2中写“John”,而单元格O2为空,它不会将单元格O2变为红色。@geogec请参阅我上面的评论,如果不是应用程序,则改为
。Intersect(范围(“B1:O10000”),Target)什么都不是。
@Shai Rado:是的,我现在将rage改为B2:O10000,弗拉尼甘加:因为我想学习VBA,我所有的工作都要编码。即使是编写简单的代码,也可能帮助我更快地理解代码通常是如何工作的。弗拉尼甘加:是因为我想学习VBA和我所有的工作都被编码。即使编写简单的代码,也可能帮助我更快地理解代码的工作原理。