我在Word文档中创建了一个带有复选框'cbxYes'
和内容控制复选框'docCbx'
的 UserForm 。我想取消 UserForm 中的'cbxYes'
复选框,然后更改Word文档中的“内容控制”复选框。
因此,输入来自 UserForm 复选框,输出是Content Control复选框。
我已经尝试过多次搜索以了解如何执行此操作,但是我找不到所需的确切信息。大多数搜索与Excel相关。老实说,我不知道我在做什么。请。正确的帮助将不胜感激。
Private Sub cbxYes_Click()
Dim oCC As ContentControl
If cbxYes.value = True Then
cbxYes.value = "True"
ActiveDocument.docCbx_Yes.value = True
Else
cbxYes.value = "False"
ActiveDocument.docCbx_Yes.value = False
End If
End Sub
我得到的错误是:
运行时错误'438':对象不支持此属性或方法。
答案 0 :(得分:0)
假设“ docCbx”是内容控件的标题,则可以替换
ActiveDocument.docCbx_Yes.value = True
作者
For Each oCC In ActiveDocument.SelectContentControlsByTitle("docCbx")
If (oCC.Type = wdContentControlCheckBox) Then
oCC.Checked = False
End If
Next
以及等效的代码,但对其他代码分支使用False。上面的代码将使用该名称更新所有复选框类型内容控件(名称在文档中不必唯一),但标记为“内容无法编辑”的控件除外-它们将维持不变。它通过不执行任何操作来处理没有该名称的内容控件的情况。
如果“ docCbx”是 Tag 的值,则需要以下内容:
For Each oCC In ActiveDocument.SelectContentControlsByTag("docCbx")
If (oCC.Type = wdContentControlCheckBox) Then
oCC.Checked = False
End If
Next
如果docCbx还是别的,我建议您改为为内容控件提供标题和/或标签,并使用上述方法。否则,您应该修改问题以准确说明控件的命名方式“ docCbx”。
您会收到此错误,因为将内容控件添加到文档不会创建文档对象的新成员,而将表单控件添加到用户表单却会创建Form对象的新成员。 (事实上,文档确实具有一种机制,其工作方式与Form对象类似,但已被弃用了很长时间。)
答案 1 :(得分:0)
问题中显示的代码将用于ActiveX复选框,而不是内容控件。 (只是使事情变得非常复杂,Word还具有复选框 form字段,它们需要另一种代码语法。)
无法通过Document
对象直接引用内容控件名称-必须在ContentControls
集合上完成。可以在“属性”对话框中为内容控件分配Title
和/或Tag
。
多个内容控件可以具有相同的名称或标题,这使代码有点复杂。查询Document.ContentControls("Title")
返回一个集合(带有该标题的所有内容控件)。
如果您知道哪一个,则可以使用Item
方法直接指定它(而不是通过一个集合),并指定它为 n 内容控件(按内容控件的顺序进行索引)。通常在只有一个知道的情况下使用。
还请注意,为了“选中”或“取消选中”内容控件复选框,应使用Checked
属性。所以:
Private Sub cbxYes_Click()
Dim oCC As ContentControl
Set oCC = ActiveDocument.SelectContentControlsByTitle("docCbx").Item(1)
If cbxYes.value = True Then
'cbxYes.value = "True" not needed
occ.Checked = True
Else
'cbxYes.value = "False" not needed
oCC.Checked = False
End If
End Sub