VBA修改工作表中ActiveX文本框字体与背景色方法
工作表ActiveX TextBox字体/背景色修改方案
工作表内的ActiveX文本框和UserForm内的文本框对象层级不同,前者由OLEObject容器承载,直接套用UserForm的属性修改方法会因为对象引用错误、容器层拦截导致设置不生效,可按以下两种方式操作:
方法1:设计时手动设置
- 点击「开发工具」选项卡中的设计模式按钮,进入控件编辑状态
- 右键点击目标文本框,选择「属性」调出属性设置面板
- 找到对应属性直接配置:
- 背景色:定位到
BackColor项,在调色板选择目标颜色,或直接输入颜色对应的长整型数值 - 字体颜色:定位到
ForeColor项选择目标颜色,也可点击Font项右侧的展开按钮,在弹出的字体设置窗口中统一配置字体样式、字号、颜色
- 背景色:定位到
- 配置完成后再次点击「设计模式」按钮退出编辑状态,设置即可生效
如果设置保存后重新打开自动恢复默认,进入「文件-选项-信任中心-信任中心设置-ActiveX设置」,取消ActiveX控件禁用选项,避免Excel重置控件自定义属性。
方法2:VBA代码动态设置
禁止直接使用TextBox1.ForeColor = 颜色值这类UserForm写法,必须先通过OLEObjects集合获取到控件实体再修改属性,参考代码如下:
Sub SetTextBoxColor() Dim targetSht As Worksheet Dim targetTb As MSForms.TextBox ' 替换为控件所在工作表的实际名称 Set targetSht = ThisWorkbook.Worksheets("Sheet1") ' 替换为目标文本框的实际控件名,默认命名为TextBox1 Set targetTb = targetSht.OLEObjects("TextBox1").Object ' 设置背景色,示例为纯白色,可替换为自定义RGB值 targetTb.BackColor = RGB(255, 255, 255) ' 设置字体颜色,示例为纯黑色 targetTb.ForeColor = RGB(0, 0, 0) ' 可按需追加字体其他属性设置 targetTb.Font.Size = 11 End Sub
运行代码前需退出设计模式,执行后属性会实时生效。
常见失效排查
- 修改后无显示变化先确认是否退出设计模式,设计模式下控件为编辑状态,不会渲染最终显示效果
- 代码运行报错先检查工作表是否开启了保护,保护状态下会禁止修改ActiveX控件属性,先取消工作表保护再操作
- 确认插入的是ActiveX控件而非表单控件:右键点击控件,如果菜单中没有「查看代码」选项,说明插入的是不支持自定义颜色的表单文本框,删除后重新选择ActiveX控件分类下的文本框插入即可
内容的提问来源于stack exchange,提问作者KORDanylo
相关产品推荐
相关产品推荐

