2015-01-21 1 views
4

Я вижу, что 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.

+0

Отметьте это -> http://stackoverflow.com/q/24132665/2140173 –

+0

Спасибо, но эта тема просто показывает, как извлечь RGB из Range.Interior.Color. Это интересная информация, но не в этом. Дело в том, что я получаю разные номера в зависимости от версии Excel. После преобразования в RGB у меня все еще есть разные номера в зависимости от версии Excel. –

+0

Я не знаю, сказано ли в OP, если ответ обновлен. Чтобы быть уверенным, что вы знаете, см. Мой обновленный ответ. –

ответ

0

Update:

Я не был в состоянии воспроизвести эту проблему в новой книге, так что это может быть книга коррупция. Обычно Range.Interior.Color является надежным в разных версиях, для всех представленных цветов.

FWIW, эта книга была отправлена ​​мне другим человеком, и этот человек находится в Excel для Macintosh, когда я нахожусь в Windows, поэтому создание книги на одной платформе, а затем ее использование на другом, возможно, было фактором в коррупция, если таковая имеется (хотя это должно работать нормально).

-1

Вы можете использовать RGB (функция) вместо этих чисел, как, например, в

Activecell.Interior.Color = RGB(200,150,230) 

Если вы хотите константы, то

Const RED = 200 
    Const GRN = 150 
    Const BLU = 230 
    ...... 
    Activecell.Interior.Color = RGB(RED, GRN, BLU) 

Как для «Ожидается ли это? », вот так: Color = 10921638 - RGB(165, 165, 165), а Color = 10855845 - RGB(166, 166, 166). У меня нет доступа к Excel 2007 на данный момент, но если ваши значения цвета действительно «темно-серые» системы в обоих случаях, то у Microsoft изменилось значение «темно-серый» между версиями Excel. Я подозреваю, что вам все равно, и я не вижу разницы между этими двумя способами. Думаю, вы можете использовать один и тот же цвет во всех версиях.

+1

ваш * ответ * является каким-то альтернативным решением, но он ** не ** отвечает на исходный вопрос, заданный, который был * Range.Interior.Color возвращает разные номера для одного и того же цвета в некоторых случаях, в зависимости от того, работает ли он в Excel 2007 или Excel 2010 или 2013 *. ** Является ли это ожидаемым? ** –

+0

@ vba4all, я неправильно понял это: «Любые предложения? Пока что я использую условное подчинение ...» –

+0

Мне задан вопрос, который задан здесь, довольно прямолинейный, цифры меняются в разных версиях XL, что ожидается? почему это происходит? –

2

Если вы ищете «цветовые коды Excel», вы найдете сайты, в которых отображаются 56 «официальных» цветов Excel. Вы не найдете ни одного из номеров, которые вы перечисляете в официальном списке.

Красный, зеленый и синий значения для номеров вы перечисляют являются:

   Red Green Blue 
10855845  165  165 165 
10921638  166  166 166 
9868950  150  150 150 Grey 40% 

14922893  141  180 227 
14857357  141  180 226 
16764057  153  204 255 Pale blue 

14211288  216  216 216 
14277081  217  217 217 
12632256  192  192 192 Grey 25% 

В каждом суб-таблицы, первые две строки показывают свои номера цвета. Несмотря на то, что комбинированные номера очень разные, вы заметите, что отдельные значения почти одинаковы, поэтому два альтернативных цвета будут выглядеть одинаково на экране. Третья строка показывает ближайший официальный цвет Excel и его название.

Вопрос для вас, чтобы исследовать: откуда берутся эти нестандартные номера цветов? Являются ли эти цвета заданными программой или у вас очень тонко изменена палитра? Мне трудно поверить, что Microsoft выпустила Excel 2007, 2010 и 2013 для вас в этом состоянии.

Новый раздел

Я играл с цветами Excel, и я убежден, ваша проблема связана с палитрой и использованием нестандартных цветов.

Я не ваш диапазон версий, так экспериментировали с 2003 и 2007

С 2003 есть палитра из 56 цветов и индекс цвета со значением 1 в 56. Я считаю, что магазины Excel в индекс цвета по отношению к ячейке, потому что:

  • Если с помощью VBA вы устанавливаете ячейку в не-палитру цветов, Excel немедленно меняет ее на цвет палитры.
  • Если вы измените цвет на палитре, каждое использование этого цвета в рабочей книге сразу же изменится.

То есть, с 2003 года вы можете иметь любые 56 цветов, но только 56 разных цветов.

В 2003 году я создал новую книгу. На палитре я переключил Красный и Синий, и я заменил Индиго, RGB (51, 51, 163), RGB (167, 167, 167).Это не стандартный цвет Excel, но если бы это было так, это было бы названо как Gray 30. Я покрасил несколько ячеек, используя эти цвета.

Я открыл эту книгу с 2007 годом и сохранил ее как файл xlsm. Цвета на листе не изменились. Я выбрал новую ячейку и определил пользовательский цвет RGB (167, 167, 167). Визуально новая ячейка была одинаковой (в моих глазах), чтобы те цветные с RGB (167, 167, 167), импортируемого из 2003, то я просмотрел эти клетки с помощью палитры и VBA:

Colour I Appearance Number according  Number according 
had set  on screen to palette   to VBA 
255,0,0  Red  0,0,255 Blue   255,0,0 
0,0,255  Blue  255,0,0 Red   0,0,255 
167,167,167 Grey 30 51,51,153 Indigo  167,167,167  Imported from 2003 
167,167,167 Grey 30 167,167,167 Grey 30 167,167,167  Created with 2007 

Подразумевается из последняя строка состоит в том, что 2007 год может корректно обрабатывать пользовательские цвета, если он определен в течение 2007 года, но безнадежно путается с импортированными пользовательскими цветами.

Мое понимание заключается в том, что с 2007 по 2010 год до 2013 года были внесены дополнительные улучшения, но с 2003 по 2007 год был полностью переписан. Я предполагаю, что ошибка в 2007 году была исправлена ​​в 2010 году.

Я считаю, что проблема заключается в использовании нестандартных цветов. 2007 может иметь более крупную стандартную палитру, но RGB (167, 167, 167) на ней нет. У меня нет 2010 или 2013, но я подозреваю, что получаю разные результаты, если бы я пробовал этот эксперимент с любым из них.

Я считаю, что вы должны перекрасить все ячейки, которые используют эти пользовательские цвета со стандартными цветами. Вы сообщаете два пользовательских оттенка серого и пользовательский вариант бледно-голубого. Разумеется, 2007, 2010 и 2013 года предлагают достаточно стандартных оттенков и цветов?

+0

Цвета в ячейках устанавливаются, когда пользователь выбирает цвет из пользовательского интерфейса Excel для выбора «Цвет заливки» для ячейки. –

+0

@GregLovern Номер цвета для ячейки может быть установлен с помощью VBA на все, что программист хочет или может быть установлен, выбрав цвет из палитры. Палитра находится под контролем пользователя и может быть изменена. Я не верю, что Microsoft изменила стандартные цвета, так как я получил книги, созданные в разных версиях Excel, не встречая разных цветов. Если вы не хотите обвинять своих программистов, вам нужно спросить, кто из ваших пользователей меняет палитру. –

+0

Похоже, вы говорите, что для любого заданного цвета в ячейке Range.Interior.Color возвращает разные числа в зависимости от палитры. В этом случае RGB также будет возвращать разные наборы чисел в зависимости от палитры, так как любое число Range.Interior.Color всегда преобразуется в один и тот же набор номеров RGB. Я удивлен, услышав, что вы получаете разные цифры (будь то Range.Interior.Color или RGB) в зависимости от палитры. Можете ли вы показать пример того, как номера Range.Interior.Color или RGB могут меняться, просто изменяя палитру, не меняя цвет заливки ячейки? –

0

Я работаю над проектом и сталкиваюсь с чем-то, что может помочь в этом вопросе. Я работаю над Excel 2010 (и на данный момент у меня нет доступа к каким-либо другим версиям), но выяснил, что существует более одного способа ссылаться на 3 x 8-битные цвета. Хотя мы все знакомы с RGB (Red-Green-Blue) ссылками, я наткнулся на кого-то, использующего BGR (Blue-Green-Red), и очень смутился так же, как и исходный пост. Я помню, как давно работал на XL2003 и обнаружил, что цвета были «правильными», поэтому я подозреваю, что MS изменила ссылки, не сказав всем (в их документации указано RGB).