Я вижу, что Range.Interior.Color возвращает разные номера для одного цвета в некоторых случаях, в зависимости от того, работает ли он в Excel 2007 или Excel 2010 или 2013 .Range.Interior.Color Различные между Excel 2007 и более поздними
Ожидается ли это? Я удивлен.
Range.Interior.Color - это цвет фона («Fill Color») ячейки. В Немедленное панели, вы можете прочитать это так:
ActiveCell.Interior.Color
И установить его так:
ActiveCell.Interior.Color = 10921638
Примеры:
Пример 1:
(это тот же самый цвет, хотя их Range.Interior.Color различны.)
- Excel 2007: 10855845
- Excel 2010/2013: 10921638
Пример 2:
- Excel 2007: 14922893
- Excel 2010/2013: 14857357
Пример 3:
- Excel 2007: 14211288
- Excel 2010/2013: 14277081
Любые предложения? На данный момент я использую условное compliling установить константы для одного номера или другой в зависимости от VBA постоянного VBA7, которая возвращает значение ИСТИНА для Excel 2010 или более поздней версии и Ложные для Excel 2007 и более ранних версий:
#If VBA7 Then
'Excel 2010 or later:
Const NO_SHADING_COLOR As Long = 16777215
Const MAIN_HEADER_COLOR As Long = 10921638 'dark gray [in xl2007 s/b 10855845]
Const SUB_HEADER_COLOR As Long = 14857357 'light blue [in xl2007 s/b 14922893]
Const SUBSUB_HEADER_COLOR As Long = 14277081 'medium gray [in xl2007 s/b 14211288]
#Else
'Excel 2007 or earlier:
Const NO_SHADING_COLOR As Long = 16777215
Const MAIN_HEADER_COLOR As Long = 10855845 'dark gray
Const SUB_HEADER_COLOR As Long = 14922893 'light blue
Const SUBSUB_HEADER_COLOR As Long = 14211288 'medium gray
#End If
UPDATE:
Да, я понимаю, что RGB можно использовать в диапазоне Range.Interior.Color и что номера RGB можно извлечь из Range.Interior.Color. Но мы можем делать это целый день и по-прежнему получать разные наборы номеров RGB в зависимости от версии Excel, что фактически возвращает нас к исходной проблеме.
Для любого заданного номера Range.Interior.Color, да, это эквивалентно определенному набору номеров RGB. Но дело в том, что в зависимости от версии Excel в некоторых случаях вы получаете разные значения Range.Interior.Color для одной и той же ячейки, не меняя цвет ячейки. Если вы выберете это число для номеров RGB, у вас просто есть разные наборы номеров RGB в зависимости от версии Excel, что не лучше, чем разные номера Range.Interior.Color в зависимости от версии.
Эти цвета ячеек устанавливаются пользователем, используя пользовательский интерфейс Excel для установки цвета заливки ячейки. Код VBA в этом проэкта не устанавливает цвета. Код VBA только GETS цветов и ветви в соответствии с цветом, найденным в обрабатываемой ячейке.
Помимо очевидных исключений, таких как Application.Version, это не нормально для свойств объекта, которые случайным образом изменяются как это от версии к версии. Согласованность свойств объектов между версиями является важной частью того, что позволяет VBA-коду работать в разных версиях. Если бы это было не так, нам пришлось бы условно-компилировать практически весь наш код Excel VBA.
Отметьте это -> http://stackoverflow.com/q/24132665/2140173 –
Спасибо, но эта тема просто показывает, как извлечь RGB из Range.Interior.Color. Это интересная информация, но не в этом. Дело в том, что я получаю разные номера в зависимости от версии Excel. После преобразования в RGB у меня все еще есть разные номера в зависимости от версии Excel. –
Я не знаю, сказано ли в OP, если ответ обновлен. Чтобы быть уверенным, что вы знаете, см. Мой обновленный ответ. –