我同意@Stephan1010 的观点,即条件格式是最好的方法。它也应该更易于管理,因为您只有 4 种颜色,这意味着 4 个条件以及包含所有适用状态的 OR 语句。如果颜色/状态发生变化,您不必修改所有 30 个...
话虽如此,虽然它会严重影响工作簿的性能,但可以通过工作表事件在 vba 中完成。第一段代码将捕获工作表 1 中 C 列的任何更改并更新背景颜色(当然也可以进行其他更改)
Private Sub Worksheet_Change(ByVal Target As Range)
minCol = Target.Cells(1, 1).Column
maxcol = minCol + (Target.Columns.Count - 1)
If minCol > 3 Or maxcol < 3 Then
Else
For Each cell In Target.Cells
If cell.Column = 3 Then
If Not IsError(Application.Match(cell.Value,
Worksheets("Sheet1").Range("Statuses"), 0))
Then
x = Application.Match(_
cell,Worksheets("Sheet1").Range("Statuses"), 0)
cell.Interior.Color = Worksheets("Sheet1")._
Range("Statuses").Cells(x, 1).Interior.Color
End If
End If
Next cell
End If
End Sub
然后,您需要在工作表 1 中捕获对状态范围的任何更改,并更新工作表 2 中的每个适用值。这将更加复杂,如果确实需要此步骤,那么您应该能够开始并本质上实现了上面代码的逆逻辑。