Установка только свойства Color гарантирует точное совпадение. Excel 2003 может обрабатывать только 56 цветов одновременно. Хорошей новостью является то, что вы можете назначить любое значение rgb на все эти 56 слотов (которые называются ColorIndexs). Когда вы устанавливаете цвет ячейки с помощью свойства Color, это заставляет Excel использовать ближайший «ColorIndex». Пример: установка ячейки в RGB 10,20,50 (или 3281930) фактически приведет к ее установке на индекс цвета 56, равный 51,51,51 (или 3355443).
Если вы хотите быть уверены, что получили точное совпадение, вам нужно изменить ColorIndex на желаемое значение RGB, а затем изменить ColorIndex ячейки на указанное значение. Однако вы должны знать, что, изменяя значение цветового индекса, вы меняете цвет всех ячеек, уже использующих этот цвет в рабочей книге. В качестве примера, Red - это ColorIndex 3. Таким образом, для любой ячейки, которую вы сделали Red, вы на самом деле сделали ColorIndex 3. И если вы переопределите ColorIndex 3, скажем, фиолетовый, то ваша ячейка действительно станет фиолетовой, но все остальные красные ячейки в Рабочая тетрадь также будет изменена на фиолетовую.
Есть несколько стратегий, чтобы справиться с этим. Один из способов - выбрать индекс, который еще не используется, или тот, который, по вашему мнению, вряд ли будет использоваться. Другой способ - изменить значение RGB ближайшего ColorIndex , чтобы ваше изменение было незначительным. Код, который я разместил ниже, использует этот подход. Воспользовавшись знанием о том, что назначен ближайший ColorIndex, он назначает значение RGB непосредственно ячейке (тем самым получая ближайший цвет), а затем назначает значение RGB этому индексу.
Sub Example()
Dim lngColor As Long
lngColor = RGB(10, 20, 50)
With Range("A1").Interior
.Color = lngColor
ActiveWorkbook.Colors(.ColorIndex) = lngColor
End With
End Sub