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.

  • Удалите всю строку на основе дубликата в ячейке без той, которая имеет конкретное значение ячейки
  • Медленная запись ввода в пользовательскую форму
  • Элемент UserSelection для MultiSelection
  • Сохранить флажок выбора пользовательской формы в массиве (для репликации на пользовательской форме)
  • Excel VBA UserForm - если не IsEmpty Then
  • Excel VBA - Как открыть Userform с использованием переменной в имени
  • Автоматическое заполнение столбцов последовательных номеров A в соответствии с количеством строк столбца B
  • Сохранение рабочих листов с формами в формате pdf
  • Ячейка, подключенная средствами управления, продолжает терять формулу
  • VBA Excel 2013: назначение значений массива из другой пользовательской формы
  • Excel начал сбой на нескольких компьютерах и несколько версий пользовательской формы
  • Interesting Posts

    Как легко получать данные из C # в Excel с помощью VSTO и обратно

    VBA для завершения цикла

    Ошибка VBA в Excel «Недостаточно памяти»

    Импорт таблицы HTML в Excel через буфер обмена

    Имеет ли эта вариация формула «вернуть последнее числовое значение в столбце» какие-либо известные условия сбоя, которые могут видеть каждый?

    Заменить содержимое Worksheets без его открытия

    Как я могу исключить типы файлов .xlsb в свой ComboBox?

    Как передать диапазон формулы Excel из функции VBA

    Скопируйте выбранные файлы в папку zipped: Ошибка «Файл не найден или отсутствует разрешение на чтение» в VBA

    Две таблицы Excel, созданные из SQL-запросов, сталкиваются в формуле автозаполнения

    Многофункциональный диапазон условного форматирования

    Оценка двух измерений данных

    Форматы / значения даты Excel VBA изменяются, когда файл открывается программно

    выйти из вложенного цикла в excel

    дополнительные записи в excel с использованием apache pois

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