Excel 2013 VBA中能否为ListBox指定项设置特定颜色?
关于Excel 2013 VBA中ListBox项着色及ListView控件的问题
首先纠正一下:网上说“ListBox无法为单个项目设置特定颜色”的说法不完全准确——标准的默认ListBox确实做不到,但通过**自绘ListBox(Owner-Drawn ListBox)**可以实现这个需求。另外关于ListView控件找不到的问题,我也会给你解决办法。
方法一:用自绘ListBox实现条件着色
Excel的ListBox支持自绘模式,你可以通过以下步骤操作:
- 在用户窗体上添加一个ListBox,然后在属性窗口里设置它的
Style属性为fmStyleOwnerDrawFixed(所有项高度一致)或者fmStyleOwnerDrawVariable(项高度可自定义)。 - 双击ListBox进入代码窗口,编写
DrawItem事件代码。这里举个实用例子:假设我们要把文本包含“完成”的项设为绿色,未完成项设为黑色:
Private Sub ListBox1_DrawItem(ByVal Index As Integer, ByVal Rect As MSForms.Rectangle, ByVal State As Integer) ' 重置背景色(避免之前的绘制残留) ListBox1.BackColor = vbWhite ' 根据条件设置文本颜色 If InStr(ListBox1.List(Index), "完成") > 0 Then ListBox1.ForeColor = vbGreen Else ListBox1.ForeColor = vbBlack End If ' 绘制当前项的文本 ListBox1.DrawMode = fmDrawModeCopy ListBox1.Print ListBox1.List(Index) End Sub
如果选择fmStyleOwnerDrawVariable模式,还需要额外编写MeasureItem事件来定义每个项的高度,不过大部分场景下fmStyleOwnerDrawFixed就足够满足需求了。
方法二:解决ListView控件找不到的问题
你看不到ListView控件,是因为它默认没有被添加到控件工具箱中,步骤如下:
- 打开VBA编辑器,确保用户窗体处于设计模式。
- 点击菜单栏的工具 -> 附加控件。
- 在弹出的列表里找到
Microsoft ListView Control, version 6.0,勾选它后点击确定。 - 现在控件工具箱里就会出现ListView的图标,你可以像添加其他控件一样把它放到用户窗体上。
用ListView设置项颜色会更直观,比如给指定项设置前景色或背景色:
' 假设已为ListView1添加了列表项 ListView1.ListItems(1).ForeColor = vbRed ListView1.ListItems(2).BackColor = vbYellow
总结
- 标准ListBox不能直接为单个项着色,但自绘ListBox可以实现条件着色;
- ListView需要先添加附加控件才能使用,它的项着色功能更易用、直观。
内容的提问来源于stack exchange,提问作者LatifaShi
相关产品推荐
相关产品推荐

