Excel VBA: копирование цвета из ячейки. Interior.Color в MSForms.Label.BackColor
У меня есть пользовательская форма в Excel 2003, которая содержит некоторые элементы управления MSForms.Label. Я хочу установить свойство .BackColor для каждого из этих элементов управления таким образом, чтобы они соответствовали цвету отдельных ячеек на листе.
Для этого я читаю свойство .Interior.Color этих ячеек, преобразовывая его в hex и используя это значение, чтобы установить свойство .BackColor объектов Label.
Моя проблема в том, что значение, исходящее из .Interior.Color, почти всегда неверно при первом чтении. Я проверил это, выполнив следующую команду в непосредственном окне редактора VBA:
- Входной ящик заполняет ячейки в таблице
- excel инициализирует «защищать / снимать защиту листа» с помощью пользовательской формы
- Элементы списка combobox Userform + сохранять значения пользовательской формы как варианты в VBA Excel
- Назначьте функцию VBA с нажатием кнопки динамически созданной кнопки в Excel Userform
- Экзамен Excel 2016 VBA активируется, но затем деактивируется
Print Hex([sourceCell].Interior.Color)
Эта команда почти всегда дает неправильное значение в первый раз, но дает правильное значение со второго раза. Если я изменил цвет заливки [sourceCell] и снова запустил команду, он будет делать то же самое, т. Е. Ошибочное значение в первый раз, правое значение второй раз вперед.
Ячейки, о которых идет речь, заполнены цветами из линий диаграммы / заполняют выбор цвета (т.е. две нижние строки, которые вы видите в диалоговом окне «Форматирование ячеек» в Excel на вкладке «Шаблоны»). Эти цвета были изменены мной, чтобы создать пользовательский набор цветов, и, как это ни странно, «неправильные» значения, похоже, соответствуют значениям по умолчанию Excel для настраиваемого диапазона цветовых решений (например, по умолчанию диаграмма линии / цвета заливки, которые вы получаете при запуске новая книга).
Кто-нибудь еще испытывал это поведение / имел обходное решение? Когда я пытаюсь прочитать значения дважды во время выполнения, он не работает, то есть он не переключается на правильное значение. Код должен быть остановлен и пользовательская форма перезагружена, чтобы заставить «правильные» значения выйти.
- Возврат ответа с помощью VBA в TextBox
- Как добавить объекты управления в пользовательскую форму в коллекцию, а затем прокрутить коллекцию и получить доступ к их свойствам?
- Ошибка проверки входа в пользовательскую форму VBA
- Попытка ссылаться на другой рабочий лист в активной книге
- Excel VBA - не может ссылаться на объекты / не может отбрасывать информацию в лист
- не удалось заполнить combobox, используя .rowsource {vba excel}
- Вызов массива по пользовательской форме Завершение / закрытие VBA
- Excel VBA: динамический диапазон для ComboBox. Значения Rowsource не отображаются при вызове userForm из командной строки
Kludge / обходной путь через Application.OnTime.
Если я запустил код подготовки пользовательской формы, чтобы установить обратные цвета объектов ярлыков с скрытой пользовательской формой, затем установите основной код для запуска из немедленного события OnTime (чтобы повторно запустить подготовительный код как часть OnTime), тогда я могу заставите Excel предоставить мне правильные значения «второй раз» при показе формы.
Это работает для меня:
MyForm.MyControl.BackColor = Range(myrange).Interior.Color
.Interior.Color
возвращает вариант, содержащий RGB диапазона выборки.
.Interior.ColorIndex
всегда возвращает -4140 или что-то странное, возможно потому, что .ColorIndex
свойственна ограничениям цвета Excel2003.