0

我在Word 文档中创建了一个带有复选框和内容控制复选框的用户窗体。我想选中UserForm中的复选框 ,然后更改 Word 文档中的 Content Control 复选框。所以输入来自UserForm复选框,输出来自 Content Control 复选框。'cbxYes''docCbx''cbxYes'

我已经尝试过多次搜索如何做到这一点,但我找不到我真正需要的东西。大多数搜索与 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”:对象不支持此属性或方法。

4

2 回答 2

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 对象的机制,但它已经被弃用了很长时间。)

于 2019-08-27T09:16:00.933 回答
0

问题中显示的代码将用于 ActiveX 复选框,而不是内容控件。(为了让事情变得非常复杂,Word 还具有需要另一种代码语法的复选框表单字段。)

无法通过Document对象直接引用内容控件名称 - 它必须在ContentControls集合上完成。可以在“属性”对话框中为内容控件分配 aTitle和/或 a 。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
于 2019-08-27T10:46:25.910 回答