【问题标题】:Changing the name of a group of ActiveX labels更改一组 ActiveX 标签的名称
【发布时间】:2020-02-13 17:07:52
【问题描述】:

我正在为 Microsoft Word VBA 脚本中的两类信息创建一系列 ActiveX 标签。信息类别为:财政年度 (FY) 和合同收益率 (CY)。我正在创建要放置在一系列表格的指定单元格中的标签。我想更改标签的名称以匹配它们的类别。例如,label1 将被命名为 FY1。我需要更改这些标签的名称,以便它们最终与 Excel 电子表格中的数据相匹配。

我在重命名部分卡住了 (ActiveDocument.Label1.Name = "FY")。

Dim num As Integer
    Dim TableNo As Integer
    Dim seq As Integer

    TableNo = ActiveDocument.Tables.Count
    num = 4
    seq = 1

'' Labels for "FY"
Do
    ActiveDocument.Tables(num).cell(6, 2).Range.InlineShapes.AddOLEControl ClassType:="Forms.Label.1"
    ActiveDocument.Label1.Name = "FY"+ seq
    seq = seq + 1
    num = num + 1
Loop Until num = TableNo + 1

'''Next Group of labels for "CY"
num = 4
seq = 1

Do
    ActiveDocument.Tables(3).cell(8, 2).Range.InlineShapes.AddOLEControl ClassType:="Forms.Label.1"
    ActiveDocument.Label1.Name = "CY"+ seq
    seq = seq + 1
    num = num + 1
Loop Until num = TableNo + 1

有一篇相关文章,但我看不出这些例子是如何相关的。

Related article

** 我的标签将被插入到文档的第 4 个表中,这就是我使用 num = 4 的原因。

【问题讨论】:

  • “卡住”不是一个有用的问题描述。您应该始终详细描述如何某些东西无法正常工作。
  • 我的问题是我不知道如何重命名标签。我可以用 'ActiveDocument.Label1.Caption = "FY1" ' 重命名标题,但我需要替换标签名称。
  • 首先,你看到我的回答了吗?其次,问题中的信息并未解释您显示的代码如何不起作用。我假设您在 `ActiveDocument.Label1.Name = "FY"+ seq` 行出现错误?在这种情况下,问题需要包括错误信息和导致它的代码行。由于我对 Word 非常了解,我可以猜到问题所在。但其他人可能做不到,所以你不会得到答案......

标签: vba ms-word activex ole


【解决方案1】:

ActiveX 控件是为在 VBA 用户窗体中使用而开发的。使它们能够插入 Office 文档表面是事后才想到的。启用 UserForm 行为涉及 Word 的一些“魔法”。

在 Word 文档的表面上,ActiveX 控件通过 Control 字段进行管理,可以通过按 Alt+F9 来打开字段代码来查看该字段。 AddOLEControl 方法可以生成字段并连接管道。

但就 Word 而言,它不会“看到”ActiveX 控件,而是使用域代码并显示域结果,即图像InlineShapesShapes 集合的成员。

因此,当与文档表面上的 ActiveX 控件通信时,必须通过图形对象才能到达“真正的控件”。

以下示例代码说明了 - 只需将您需要使用的 Range 替换为 Selection.Range(为了简单起见,并使所有阅读此问答的人都可以访问代码示例)。

AddOLEControl 方法在InlineShapes 集合上运行,因此它返回一个InlineShape 对象。 MSForms.Label 对象设置为 InlineShape 的 OLEFormat.Object - 这是提供与控件编程接口的连接的原因。通过它,可以访问控件的属性窗口中的属性。

Sub InsertRenameActiveX()
    Dim ctl As MSForms.Label
    Dim ils As Word.InlineShape

    Set ils = Selection.Range.InlineShapes.AddOLEControl(ClassType:="Forms.Label.1")
    Set ctl = ils.OleFormat.Object
    ctl.Name = "FY" & "3"
    ctl.Caption = "test"
End Sub

【讨论】:

  • 是的!这行得通,而且解释非常清楚,对刚刚了解这一点的人(我)很有帮助。
猜你喜欢
  • 2020-05-05
  • 2018-06-10
  • 2019-02-19
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多