VBA ActiveX Label控件BackStyle属性设置透明无效问题问询
ActiveX Label控件BackStyle属性设置无效的原因分析
问题描述
尝试在Excel工作表中创建ActiveX Label控件并设置透明背景,代码如下:
Sub CreateButton() Dim menuxBx As MSForms.Label ActiveSheet.Select Set menuxBx = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Label.1", _ Link:=False, DisplayAsIcon:=False, Left:=200, Top:=100, Width:=100, Height:=35).Object With menuxBx .BackStyle = 0 .Name = "MouseOverBX" .Visible = True .caption = "Test" End With End Sub
代码可正常创建标签,其他属性修改均有效,但.BackStyle = 0设置无效。手动创建标签时通过属性窗口设置BackStyle可正常实现透明,但代码创建的标签存在以下异常:
- 即使移除代码中的
.BackStyle设置行,手动修改属性窗口的BackStyle为透明,标签仍保持不透明 - 尝试通过运行时事件修改属性也无效果:
Private Sub MouseOverBX_Click() Me.MouseOverBX.BackStyle = 0 End Sub
原因解释
该现象的核心原因是通过OLEObjects.Add创建ActiveX Label时,外层OLEObject容器的填充设置会覆盖控件自身的BackStyle属性:
- 手动创建ActiveX Label时,Excel会自动将OLEObject层级的
Fill.Visible属性设为False,此时MSForms.Label自身的BackStyle设置才能正常生效 - 但代码创建控件时,OLEObject默认的
Fill.Visible为True,其自带的填充颜色会完全遮挡控件的透明效果——哪怕你修改了控件自身的BackStyle = 0,外层容器的填充依然会显示,导致标签看起来始终不透明 - 后续无论手动修改控件的
BackStyle,还是通过代码在运行时调整,只要外层OLEObject的Fill.Visible未设为False,透明效果就无法显现
内容的提问来源于stack exchange,提问作者Frustrated_Coder
相关产品推荐
相关产品推荐

