【发布时间】:2019-09-23 22:41:49
【问题描述】:
我有一个带有 5 个复选框内容控件的 Word 文档 - 这些控件用于显示在文档被 pdf 和/或打印时选择(或未选择)哪些选项。他们自己实际上不需要“做”任何事情,代码方面。
我有一个用户表单,它有 5 个复选框,对应于文档中的 5 个复选框。用户可以选择任何、无或所有这些用户表单复选框,并且我希望 word 文档内容控件复选框匹配。
为了简单起见,我将内容控件复选框命名为与用户表单复选框相同,希望在我开始工作后循环通过代码。
打开用户表单时,以下工作:
Private Sub UserForm_Initialize()
Dim x As Variant
Dim z As control
On Error GoTo quit
For Each x In Array("ChkA", "ChkB", "ChkC", "ChkD", "ChkE")
For Each z In Me.Controls
If z.Name = x And ActiveDocument.SelectContentControlsByTitle(x).Item(1).Checked = True Then z.Value = True
Next z
Next x
quit:
End Sub
这在技术上确实有效,但有点不明智,因为只有一个“ChkA”或“ChkB”等实例,但此代码循环遍历每个复选框的每个名称,这意味着它实际上执行了 25 次检查它只需要做 5 个。
但是,当尝试将复选框值从用户表单移回 word 文档时,上面的“相同”代码(但相反)不起作用,即:
Private Sub cmdEnter_Click()
Dim x As Variant
Dim z As control
For Each x In Array("ChkA", "ChkB", "ChkC", "ChkD", "ChkE")
For Each z In Me.Controls
If z.Name = x And z.Value = True Then ActiveDocument.SelectContentControlsByTitle(x).Item(1).Checked = True
Next z
Next x
Unload Me
End Sub
这会在“For Each z ...”行出现类型不匹配错误。
我想要做的是用变量名引用我的用户表单复选框,以便我可以循环遍历它们,可能类似于以下内容?
Dim x as Variant
Dim y as String
Dim z as control
x = Array("ChkA", "ChkB", "ChkC", "ChkD", "ChkE")
For i = 0 To 4
y = x(i)
Set z = Me.Controls(y)
ActiveDocument.FormFields(y).CheckBox.Value = z.Value
Set z = Nothing
Next i
或者类似的?
【问题讨论】: