文章目录
前言
颜色的设置在VBA开发中经常用到,我们可能需要给单元格设置背景色,给单元格文本设置颜色,还需要给可视化控件的各个部位设定颜色。
在VBA中,有两种方法设置颜色,一种方法是给需要赋颜色的属性一个代表颜色的长整数,另一种方法是调用RGB函数,这个函数有三个参数,分别代表RGB数值。接下来我们分别探讨如何使用这两种方式。
1.用代表颜色的长整数来设置颜色
长整数的范围从0~16777215,不同的数值就代表着不同的颜色。但是我们很难直观的感受到不同数字所代表颜色的差异。所以我们还得采用以下两种技巧:
1)使用VBA系统的颜色常量
2)自己编制一个小程序,用手工给某个单元格用调色盘配好颜色,然后用程序获取这个颜色对应的长整数数值,然后再使用这个数值用到我们的程序中。
1.1 VBA颜色常量
VBA开发中,有一些常用的常数,笔者尝试将它们总结出来,供读者作为参考。
1.1.1通用颜色常量
常数名 | 定义 | 对应长整数值 |
vbRed | 红色 | 0xFF |
vbGreen | 绿色 | 0xFF00 |
vbBlue | 蓝色 | 0xFF0000 |
vbYellow | 黄色 | 0xFFFF |
vbBlack | 黑色 | 0x0 |
vbCyan | 青色 | 0xFFFF00 |
vbWhite | 白色 | 0xFFFFFF |
vbMagenta | 洋红(紫) | 0xFF00FF |
1.1.2与窗体和其他可视化元素相关的颜色常量
这部分颜色常量通常在配置可视化控件的颜色时需要用到,在任意一个可视化控件,比如ActiveX命令按钮上,右键选择属性,在弹出的属性框的BackColor 和ForeColor属性栏内,点击就可显示以下颜色常量的定义。选择这些常量的来配置可视化控件,会与操作系统匹配得比较好。这种颜色常量总共有25个,这里列出比较常用的几个供大家参考。更多的常量,读者可以再excel控件的属性栏里很轻松的看到。
常量名 | 定义 |
vbScrollBars | 滚动条颜色 |
vbDesktop | 桌面颜色 |
vbActiveTitleBar | 活动标题栏颜色 |
vbInactiveTitleBar | 非活动标题栏颜色 |
vbMenuBars | 菜单条的颜色 |
vbWindowBackgroud | 窗口背景颜色 |
vbWindowFrame | 窗口框架颜色 |
1.2 编制小程序来获取相关颜色对应的长整数
我们只需要一个ActiveX命令按钮,并在按钮的Click事件中加上一行程序,就可以实现获取颜色对应长整数的功能。
具体使用方法,用excel菜单中的颜色调色板功能,给单元格A1设置我们想要的颜色,然后点击按钮,就可以在B1单元中显示该颜色对应的长整数。
然后我们再将该长整数应用于我们正在开发的应用中,是不是就可以简单的实现我们的需求了?
Private Sub CommandButton1_Click()
Sheet1.Cells(1, 2) = Sheet1.Cells(1, 1).Interior.Color
End Sub
2.调用RGB函数来设置颜色
RGB函数是VBA内置函数之一,它有三个参数,都是Variant(Integer)类型,分别表示红、绿、蓝三种原色的分量。这三个参数的有效值均为0~255,如果给定的参数值超过255,就都按255处理。
有了这个函数,我们可以任意指定颜色,但是还是存在一个困难,在没有看到真实的效果之前,程序设计员很难确定红绿蓝三分量的值多大合适。
针对这个问题,我们可以写三行小程序,开发一个小调色板。这次,我们不需要ActiveX按钮,我们直接在Worksheet的Change事件中加上程序,就可以实现这个调色板。
具体使用方法,在单元格A1,B1,C1中填入任意0~255的数字,单元格D1的颜色就会根据前三个格子的数字自动变化。
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheet2
.Cells(1, 4).Interior.Color = RGB(.Cells(1, 1), .Cells(1, 2), .Cells(1, 3))
End With
End Sub
在运用上面咱们自己开发的小调色板程序时,是不是发现一个有趣的现象?那就是当RGB三个分量相同时,实际上展现出来的颜色就是灰色,随着数字从0 ~255变化,从纯黑到纯白,中间是不同程度的灰色。
所以如果我们希望Excel展现一张灰度图,实际上是可以很简单的通过RGB函数来实现的。这个有兴趣的读者可以在评论区留言细谈。