如果select了许多单元格,引用的单元格会变黑

我有这些表Sheet1和另一个是Sheet2

Sheet1Sheet2 Sheet1获取其值(包括单元格的颜色)。

我有这块代码来检查Sheet2的活动单元格颜色,然后更改Sheet1同一单元格的颜色。

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Interior.Color = 5296274 Then Worksheets("ALL BRANDS").Range(Target.Address(False, False)).Interior.Color = 5296274 Else Worksheets("ALL BRANDS").Range(Target.Address(False, False)).Interior.Color = ActiveSheet.Range(Target.Address(False, False)).Interior.Color End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Interior.Color = 5296274 Then Worksheets("ALL BRANDS").Range(Target.Address(False, False)).Interior.Color = 5296274 Else Worksheets("ALL BRANDS").Range(Target.Address(False, False)).Interior.Color = ActiveSheet.Range(Target.Address(False, False)).Interior.Color End If End Sub 

问题是当我在Sheet2同时select多个单元格时 SelectCell

它将Sheet1引用的单元格颜色为 黑色

您需要分别收集每个单元格的Interior.Color属性。

Range对象由多个单元格组成时,一些属性(如ValueFormula )将返回一个值数组。 许多属性,包括Interior.Color ,都不会。 在Interior.Color的情况下,如果范围内的所有单元格具有相同的背景颜色,则会得到正确的值。 如果即使一个单元格具有不同的颜色,该属性也不能给你一个单一的正确答案,并且只返回0(黑色)。

作为一个方面说明,你的If语句没有做任何有用的写作。 我假设你想要复制以下样本的任何颜色。 如果你只想复制一定的绿色,请保留你的If但放弃其他的Else。

 Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range With Worksheets("ALL BRANDS") For Each c In Target .Range(c.Address).Interior.Color = c.Interior.Color Next c End With End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim c As Range With Worksheets("ALL BRANDS") For Each c In Target .Range(c.Address).Interior.Color = c.Interior.Color Next c End With End Sub 

真的,你应该把代码移入一个函数,并从每个事件中调用它,而不是在多个地方重写和维护代码。