Excel VBA:将颜色从Cell.Interior.Color复制到MSForms.Label.BackColor

我在Excel 2003中包含一些MSForms.Label控件的用户窗体。 我想要设置每个这些控件的.BackColor属性,以便它们匹配工作表上某些单个单元格的颜色。

为此,我读取这些单元的.Interior.Color属性,将其转换为hex,并使用该值设置Label对象的.BackColor属性。

我的问题是,第一次读取.Interior.Color的值几乎总是不正确的。 我已经通过在VBA编辑器立即窗口中运行以下命令testing了这一点:

Print Hex([sourceCell].Interior.Color) 

这个命令几乎总是在第一次给出错误的值,但是从第二次开始给出正确的值。 如果我改变[sourceCell]的填充颜色并再次运行命令,它会做同样的事情,即第一次错误的值,第二次右值。

有问题的单元格全部用图表行/填充颜色select(即在“模式”选项卡下Excel的“格式单元格”对话框中可以看到的两个底部行)填充颜色。 这些颜色已经被我修改,以给出一组自定义的颜色,并且说明性地,“错误”值似乎与Excel的默认颜色select的自定义范围相匹配(即默认的图表线条/填充颜色,当你开始新的工作手册)。

有没有其他人经历过这种行为/有一个解决方法? 当我尝试在运行时读取两次值时,它不起作用,即它不切换到正确的值。 必须停止代码并重新载入用户表单以强制“正确”的值出来。

Kludge /解决方法通过Application.OnTime。

如果我运行用户窗体的准备代码来设置隐藏的用户窗体的标签对象的背景色,然后设置主代码从立即的OnTime事件运行(确保重新运行准备代码作为OnTime的一部分),那么我可以强制Excel在显示表单时为我提供正确的“第二次”值。

这适用于我:

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

.Interior.Color返回包含采样范围的RGB的Variant。

.Interior.ColorIndex总是返回-4140或奇怪,可能是因为.ColorIndex是Excel2003的颜色限制的特有。