如果你曾被老板要求“把这个表格做得再五彩斑斓一点”,这篇文章就是你的救星。
前言:不会画画的VBA,不是好表弟
各位Excel苦工、VBA野路子选手、以及那些被“五彩斑斓的黑”折磨过的朋友们:
大家好。
今天咱们聊一个看起来没啥用,用起来真香的VBA对象——FillFormat。
简单说,FillFormat就是Excel里负责“填充”的那个小妖精。
它管着单元格、形状、图表的底色、渐变、纹理、甚至图片填充。
换句话说:
你手动在Excel里给一个矩形涂颜色 → 用的是FillFormat
你用VBA给某个形状加上彩虹渐变 → 用的还是FillFormat
你想让老板眼前一亮(物理) → FillFormat能做到
一、FillFormat到底是谁?在哪?干啥的?
FillFormat本身不是独立存在的。
它依附于Shape对象(形状)。
所以正确的打开方式是:
Dim shp As Shape
Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100, 100, 150, 100)
shp.Fill.ForeColor.RGB = RGB(255, 0, 0) ' 红色填充
也就是说:
先有形状,才有FillFormat。
一个小坑:单元格的背景色不属于FillFormat,那是Interior对象管的。
别搞混,否则就像拿勺子喝汤——能用,但不专业。
二、FillFormat的几种“整活”方式
1. 纯色填充 —— 最老实,也最无聊
With ActiveSheet.Shapes(1).Fill
.Visible = True
.ForeColor.RGB = RGB(0, 128, 0) ' 绿色
.BackColor.RGB = RGB(255, 255, 255)
.Solid
End With
用途:给报表标题刷个公司主色调,显得你很职业。
2. 渐变填充 —— 甲方最爱
With ActiveSheet.Shapes(1).Fill
.Visible = True
.OneColorGradient Style:=msoGradientHorizontal, Variant:=1, Degree:=0.5
.ForeColor.RGB = RGB(0, 112, 192)
End With
几个参数解释一下:
Style:方向(水平、垂直、对角线等)
Variant:渐变变体(1~4,像不同的心情)
Degree:0~1,越靠近1颜色越浓
如果你敢写Degree:=1,恭喜你,获得了一个“闪瞎狗眼”的标题栏。
3. 图案填充 —— 回到90年代
ActiveSheet.Shapes(1).Fill.Patterned msoPatternHorizontalBrick
这个真的不建议用,除非你想让表格看起来像Windows 98的扫雷。
4. 图片填充 —— 把你家猫放进Excel
ActiveSheet.Shapes(1).Fill.UserPicture "C:\cat.jpg"
注意:不要在公司报表里放猫,除非你确定老板也喜欢猫。
(别问我是怎么知道的)
三、实战骚操作:动态KPI指示器
比如你做了一个销售仪表盘,想根据完成率自动变色:
Dim rate As Double
rate = Range("B2").Value
With ActiveSheet.Shapes("KPI_Rectangle").Fill
.Solid
If rate >= 1 Then
.ForeColor.RGB = RGB(0, 176, 80) ' 绿
ElseIf rate >= 0.8 Then
.ForeColor.RGB = RGB(255, 192, 0) ' 黄
Else
.ForeColor.RGB = RGB(255, 0, 0) ' 红
End If
End With
把这段写在Worksheet_Change事件里,每次改数字自动变色,
老板看了当场想给你涨工资(并让你教会他儿子)。
四、那些年我踩过的FillFormat的坑
坑1:Visible属性忘了开
有时候填充不显示,是因为:
.Fill.Visible = True ' 这行没写,等于没化妆就出门
坑2:渐变类型设错
OneColorGradient和TwoColorGradient不是同一个妈生的,混用会报错。
坑3:图片路径写死
UserPicture给的是绝对路径,发给同事后人家电脑没这张图,直接崩。
建议把图片嵌入工作簿,或者用相对路径+ThisWorkbook.Path。
五、给初学者的真诚建议
别在所有单元格上都用FillFormat
会卡,真的会卡。Excel不是PS。
善用录制宏
手动操作一次 → 录宏 → 看代码 → 删掉多余部分 → 得到纯FillFormat代码。
颜色用RGB,不要用颜色常量(如vbRed)
记住一句咒语
Shapes(1).Fill —— 你能改变一切,但不要滥用。