也许由于我的英语不好,你们中的一些人可能会误解我想做什么。无论如何,这是我想要的代码。经过多次试验和错误,我做到了,但我怀疑它是最好的方式,但它的工作原理=)。如果有人知道如何使代码更好,请告诉我=)。 我以前的帖子也在这个新代码之下。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim row As Integer
For row = 1 To 1000
If Cells(row, "A").Value = "Yes" Then
Range("B" & row).Interior.ColorIndex = 4
End If
If Cells(row, "A").Value = "yes" Then
Range("B" & row).Interior.ColorIndex = 4
End If
Next row
End Sub
上一篇文章
我在excel中编写了一个VBA代码,我想在每次写入时更改单元格颜色"是"。在这种情况下,我写"是"在E列和A列中应该改变颜色。我使用了for循环,但它没有按我的意愿运行。我有一种感觉,我觉得有点不对劲......
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cellNr As Long
For cellNr = 1 To 5
If Range("E" & cellNr).Value = "yes" Then
Range("A" & cellNr).Interior.ColorIndex = 5
Else
ActiveCell(0, -2).Interior.ColorIndex = 4
End If
Next cellNr
End Sub
答案 0 :(得分:3)
对公式使用条件格式。从第1行开始,所需的公式为
=$E1="yes"
答案 1 :(得分:1)
如果我理解您要尝试使用以下行:
ActiveCell(0, -2).Interior.ColorIndex = 4
将其替换为:
ActiveCell.Offset(0, -2).Interior.ColorIndex = 4
据我所知,我告诉你删除的行总是会抛出错误。它在句法上没有任何意义。您应该使用“偏移”功能获取相对于“活动单元格”的位置。但是,如果活动单元格在A列或B列中,则此偏移函数将引发错误,因为活动单元格左侧的列少于2列。
答案 2 :(得分:0)
考虑:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rOfInterest As Range
Set rOfInterest = Range("E1:E5")
If Intersect(Target, rOfInterest) Is Nothing Then Exit Sub
v = Target.Value
If v = "yes" Then
Target.Offset(0, -4).Interior.ColorIndex = 5
Else
Target.Offset(0, -4).Interior.ColorIndex = 4
End If
End Sub
并确保宏位于工作表代码区域中。