更改一组 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 控件,它与域代码一起工作并显示域结果,这是一个 image,InlineShapes
或 Shapes
集合的成员。
与文档表面上的 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
我正在为 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 控件,它与域代码一起工作并显示域结果,这是一个 image,InlineShapes
或 Shapes
集合的成员。
与文档表面上的 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