Excel VBA当时在单元格上改变颜色

也许是由于我的英语不好,你们中的一些人可能会误解我想做的事情。 无论如何,这是我想要的代码。 经过许多尝试和错误,我做了它,但我怀疑它是最好的方法,但它的工作=)。 如果有人知道如何使代码更好,请告诉我=)。 我以前的post也在这个新的代码下面。

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代码,每当我写“yes”的时候我想改变单元格的颜色。 在这种情况下,我在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 

使用条件格式与公式。 从第一行开始,所需的公式是

 =$E1="yes" 

在这里输入图像说明

如果我明白你正在尝试用下面这行来做什么:

 ActiveCell(0, -2).Interior.ColorIndex = 4 

将其replace为:

 ActiveCell.Offset(0, -2).Interior.ColorIndex = 4 

据我所知,我告诉你删除的行总是会抛出一个错误。 这在句法上没有任何意义。 您应该使用偏移function获取相对于活动单元格的位置。 而且,如果活动单元格在列A或B中,则此偏移量函数将引发错误,因为活动单元格左侧的列数less于2列。

考虑:

 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 

并确保该macros在工作表代码区域中。