2

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

为此,我正在读取这些单元格的 .Interior.Color 属性,将其转换为十六进制并使用该值来设置 Label 对象的 .BackColor 属性。

我的问题是来自 .Interior.Color 的值在第一次读取时几乎总是不正确。我通过在 VBA 编辑器即时窗口中运行以下命令对此进行了测试:

Print Hex([sourceCell].Interior.Color)

该命令在第一次几乎总是给出错误的值,但从第二次开始给出正确的值。如果我更改 [sourceCell] 的填充颜色并再次运行命令,它将执行相同的操作,即第一次错误值,第二次正确值。

有问题的单元格都填充了来自图表线条/填充颜色选择的颜色(即,您可以在 Excel 的“模式”选项卡下的“单元格格式”对话框中看到的底部两行)。我已经修改了这些颜色以提供一组自定义颜色,并且很明显,“错误”值似乎与 Excel 的自定义颜色选择范围的默认值相匹配(即,您在开始时获得的默认图表线/填充颜色)新工作簿)。

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

4

2 回答 2

0

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

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

于 2013-01-25T17:03:54.070 回答
0

这对我有用:

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

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

.Interior.ColorIndex总是返回 -4140 或一些奇怪的东西,可能是因为.ColorIndexExcel2003 的颜色限制所特有的。

于 2016-08-06T18:08:15.227 回答