如果select了许多单元格,引用的单元格会变黑
我有这些表Sheet1
和另一个是Sheet2
。
Sheet1
从Sheet2
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多个单元格时
它将Sheet1
引用的单元格颜色为
您需要分别收集每个单元格的Interior.Color
属性。
当Range
对象由多个单元格组成时,一些属性(如Value
和Formula
)将返回一个值数组。 许多属性,包括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
真的,你应该把代码移入一个函数,并从每个事件中调用它,而不是在多个地方重写和维护代码。