Excel VBA: копирование цвета из ячейки. Interior.Color в MSForms.Label.BackColor

У меня есть пользовательская форма в Excel 2003, которая содержит некоторые элементы управления MSForms.Label. Я хочу установить свойство .BackColor для каждого из этих элементов управления таким образом, чтобы они соответствовали цвету отдельных ячеек на листе.

Для этого я читаю свойство .Interior.Color этих ячеек, преобразовывая его в hex и используя это значение, чтобы установить свойство .BackColor объектов Label.

Моя проблема в том, что значение, исходящее из .Interior.Color, почти всегда неверно при первом чтении. Я проверил это, выполнив следующую команду в непосредственном окне редактора VBA:

Print Hex([sourceCell].Interior.Color) 

Эта команда почти всегда дает неправильное значение в первый раз, но дает правильное значение со второго раза. Если я изменил цвет заливки [sourceCell] и снова запустил команду, он будет делать то же самое, т. Е. Ошибочное значение в первый раз, правое значение второй раз вперед.

Ячейки, о которых идет речь, заполнены цветами из линий диаграммы / заполняют выбор цвета (т.е. две нижние строки, которые вы видите в диалоговом окне «Форматирование ячеек» в Excel на вкладке «Шаблоны»). Эти цвета были изменены мной, чтобы создать пользовательский набор цветов, и, как это ни странно, «неправильные» значения, похоже, соответствуют значениям по умолчанию Excel для настраиваемого диапазона цветовых решений (например, по умолчанию диаграмма линии / цвета заливки, которые вы получаете при запуске новая книга).

Кто-нибудь еще испытывал это поведение / имел обходное решение? Когда я пытаюсь прочитать значения дважды во время выполнения, он не работает, то есть он не переключается на правильное значение. Код должен быть остановлен и пользовательская форма перезагружена, чтобы заставить «правильные» значения выйти.

Kludge / обходной путь через Application.OnTime.

Если я запустил код подготовки пользовательской формы, чтобы установить обратные цвета объектов ярлыков с скрытой пользовательской формой, затем установите основной код для запуска из немедленного события OnTime (чтобы повторно запустить подготовительный код как часть OnTime), тогда я могу заставите Excel предоставить мне правильные значения «второй раз» при показе формы.

Это работает для меня:

 MyForm.MyControl.BackColor = Range(myrange).Interior.Color 

.Interior.Color возвращает вариант, содержащий RGB диапазона выборки.

.Interior.ColorIndex всегда возвращает -4140 или что-то странное, возможно потому, что .ColorIndex свойственна ограничениям цвета Excel2003.

  • Выход VBA в отношении кнопок выбора
  • отправка массовой электронной почты с помощью опции слияния из пользовательской формы vba
  • Проблема моделирующей пользовательской формы Excel
  • Вызовите UserForm из модуля, чтобы отобразить всплывающие диаграммы и вернуться в одно и то же место в модуле
  • Как обнаружить mouse_down на кадре Userform, пока мышь все еще нажата
  • Кнопка VBA Options, как подключиться к модулю?
  • Элемент управления Excel VBA Excel дает ошибку «Недопустимое значение свойства» при установке ширины
  • Показать текущее время (EST)
  • Как установить FileDialog, чтобы не разрешать двойной щелчок
  • Изменение столбцов для comboboxes пользовательской формы Excel
  • Excel VBA UserForm блокирует лист
  • Interesting Posts

    Получить наибольшее значение поля, для диапазона ячеек, заданных динамически другой ячейкой

    Набор коллекции Vba и получение значения из коллекции в рамках пользовательской функции

    Userform combobox принимает только первое значение – Excel VBA

    Как объединить ячейки и установить значение одновременно с помощью Apache POI?

    Получить цену из таблицы в Excel с помощью поиска или макроса

    Код места вылета из местоположения (VBA)

    Скопировать весь столбец в текстовое поле

    Как сохранить данные в Excel (VSTO), разделяемые несколькими пользователями?

    Произвольная эквивалентность дат

    Разработка веб-части для sharepoint 2007 без Sharepoint Server или Windows Sharepoint Services 3.0

    Excel VBA: сохранение формул, написанных на макрос в листе, поэтому пользователь может вручную изменить формулу на листе

    Раздельная адресная колонка

    Как «Добавить эти данные в модель данных?» И сделать данные в значениях разными?

    Исключение некоторых столбцов при копировании одной строки в другую.

    Как захватить кнопку «Печать» из строки меню в макрокоманде

    Давайте будем гением компьютера.