首页 > 解决方案 > 如何定位 ActiveX 标签内联形状以更改背景色并隐藏标签中的文本

问题描述

我刚刚从一个适用于 ActiveX 文本框控件的网站上找到了这段代码。我希望它在一个标签 ActiveX 控件上工作,当我提交命令按钮控件时,标签中会发生两件事:标签从红色变为白色和 .caption = ""。(我的目标是隐藏标签)。

我正在尝试的代码适用于文本框控件,但不适用于标签,因为我认为它们是不同的数据类型?(我得到一个不匹配的错误)。你能帮忙吗?提前谢谢?

这是我尝试过的,但得到错误:

    Dim ils As Word.InlineShape
Dim olef As Word.OLEFormat
Dim tb As MSForms.Label
Set ils = ActiveDocument.InlineShapes(1)
Set olef = ils.OLEFormat
Set tb = olef.Object
tb = lbl_test
lbl_test.Caption = ""
lbl_test.BackColor = RGB(255, 255, 255)

标签: vbams-word

解决方案


如果 InlineShapes(1) 引用的 InlineShape不是MSForms.Label,您将在“Set ils”行中收到类型不匹配错误。所以也许你的代码使用了错误的形状。如果 InlineShapes(1)一个 MSForms.Label,这应该可以工作:

Dim ils As Word.InlineShape
Dim olef As Word.OLEFormat
Dim tb As MSForms.Label
Set ils = ActiveDocument.InlineShapes(1)
Set olef = ils.OLEFormat
Set tb = olef.Object
tb.Caption = ""
tb.BackColor = RGB(255, 255, 255)

这条线

tb = lbl_test

可能正在做一些与你想的完全不同的事情。推杆

lbl_test.Caption = ""

在它建议您尝试创建对 MSForms.Label 对象的引用之后,但我猜 lbl_test 是一个字符串变量(我们无法从您提供的代码段中看到)。如果是这样,尝试设置

lbl_test.Caption

也会导致错误。

什么

tb = lbl_test

实际上所做的是将 lbl_test 的值分配给 tb 对象的“默认成员”。对于 MSForms.Label 对象,默认成员是 .Caption,(您可以在 VB 编辑器的对象查看器中查找它)因此实际上该行应该设置标签的标题。但最好不要依赖默认成员并将其拼写为

tb.Caption = lbl_test

有几种方法可以访问文档表面中的 ActiveX 控件。有这个,但是如果您碰巧知道它的名称,您也可以直接从 ThisDocument 访问该控件,例如通过 ThisDocument.Label1。那么你真的不需要知道控件的类型。

但否则你必须像你一样访问 InlineShape 或 Shape 。因为不同的 ActiveX 控件确实有不同的成员(例如,标签有标题但 TextBox 没有),您最好在使用它之前检查对象类型,也许像这样......

    Dim ils As Word.InlineShape
    Set ils = ActiveDocument.InlineShapes(1)
    If Not (ils.OLEFormat Is Nothing) Then
      With ils.OLEFormat
        Select Case .ClassType
        Case "Forms.Label.1"
          ' You don't even need to assign to an object variable
          With .Object
            .Caption = ""
            .BackColor = RGB(255, 255, 255)
          End With
        Case "Forms.TextBox.1"
          ' do the appropriate thing
        Case "Forms.CheckBox.1"
          ' do the appropriate thing
        Case Else
          ' e.g. it might not be an ActiveX control
          ' perhaps do nothing
      End Select
    End With
  End If

推荐阅读