如何使 Excel ActiveX 标签在运行时透明……?

How do I make an Excel ActiveX label to be transparent ... at runtime?

我想在 Excel 中的 sheet 上放置一个透明标签,这样我就可以利用标签的 MouseMove 事件到 "draw cells"(又名更改它们的填充颜色等等)通过鼠标点击/拖动/等等 - 因为我不能在单元格本身上这样做。

现在一切正常,除了我无法在运行时使标签透明(在 VBA 中)...而在设计模式中执行完全相同的操作会按预期工作。具体来说,我有代码(或多或少):

Dim MapLabel As OLEObject
On Error Resume Next
Sheet2.OLEObjects("MapLabel").Delete
Set MapLabel = Sheet2.OLEObjects.Add("Forms.Label.1")
MapLabel.name = "MapLabel"
MapLabel.Placement = xlMoveAndSize
MapLabel.Object.Caption = ""
' Problem line below
MapLabel.Object.BackStyle = fmBackStyleTransparent
' Problem line above
MapLabel.Left = Sheet2.cells(2, 6).Left
MapLabel.Top = Sheet2.cells(2, 6).Top
MapLabel.Width = Sheet2.cells(2,6).Width * 10
MapLabel.Height = Sheet2.cells(2,6).Height * 10

所以,换句话说,我先删除名为'MapLabel'的标签,然后重新创建它(上面的代码进入了"init" Sub)。除标记的代码行外,所有代码行均产生所需的结果。标记的 确实 将标签的 BackStyle 属性 设置为 fmBackStyleTransparent ...但它不会 实际上使标签透明.这令人沮丧,因为它是在设计时完美运行的相同方法!

你有解决办法吗?我阅读了有关通过将标签声明为 MsForms.Label 或控件来解决类似问题的信息,但是 sheet 对象没有这些属性,此外,还有更多的标签属性可以使用 OLEObject 进行设置而不是借助 MsForms.Label 或 Control.

我和你遇到了同样的问题,但在 Word 中。我的解决方案是执行以下操作:

在设计模式中:

  1. 右键单击对象
  2. 导航至 Switch to automatic form/Image > Wrapping > In front of the text
  3. 在您的标签中添加空白图片

在这一行之后你需要做的就是:

MapLabel.Object.BackStyle = fmBackStyleTransparent

输入这一行:

ActiveSheet.Shapes(MapLabel.Name).Fill.Transparency = 1

希望对您有所帮助。

P.S。如果您需要解释,我会编辑我的答案。