更改一组 ActiveX 标签的名称

Changing the name of a group of ActiveX labels

我正在为 Microsoft Word VBA 脚本中的两类信息创建一系列 ActiveX 标签。信息类别为:财政年度 (FY) 和合同收益 (CY)。我正在创建要放置在一系列 table 的指定单元格中的标签。我想更改标签的名称以匹配它们的类别。例如,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 table,这就是我使用 num = 4 的原因。

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

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

但就 Word 而言,它不是 "see" ActiveX 控件,它与域代码一起工作并显示域结果,这是一个 imageInlineShapesShapes 集合的成员。

与文档表面上的 ActiveX 控件通信时,因此需要通过图形对象才能到达 "real control"。

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

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

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