使用宏插入纯文本内容控件
Inserting a Plain Text Content Control with a Macro
我正在尝试使用宏自动生成预先存在的原始 .docx 表单,并且需要通过宏将纯文本内容控件插入表单的各个位置。在原始的 .docx 表单上,内容控制字段是 8 个带下划线的空格并被括号包围。在原来的表单中,当我点击内容控件时,我只需要点击一次,当我点击它并输入信息时,下划线空间消失,我只剩下我输入的文本和括号。如何使用 VBA 制作具有这些属性的内容控件?在我的宏生成文档中,我必须先单击内容控件中带下划线的空格,然后单击左侧的 3 个点才能输入数据。但是,当我在宏生成的文档中执行此操作时,下划线仍然存在。如果我在宏生成文档中的内容控件上单击一次,输入将添加到空格而不是替换它们。此外,您如何在内容控件中的空格下划线,以便在单击内容控件之前存在下划线,但在输入文本时下划线消失?括号不应在任何时候加下划线。
我尝试了下面的代码。我花了大约 2 个小时在谷歌上搜索东西试图找到解决方案,但没有成功。我也试过用对象来做,但是我丢失了那个代码而且似乎找不到它。我找到的目标代码也不起作用。
Private Sub POAContentControl()
With Selection
.TypeText Text:="("
.Range.ContentControls.Add (wdContentControlText)
.TypeText Text:=" "
.Font.UnderlineColor = wdColorAutomatic
.Font.Underline = wdUnderlineSingle
.EndKey unit:=wdLine 'Exits the Content Control
.Font.Underline = wdUnderlineNone
.TypeText Text:=")"
End With
End Sub
首先,原始内容控件中的文本几乎肯定不是 8 个带下划线的空格。如果是的话,下划线就不会消失。相反,它只是 8 个下划线。
您无法改写内容控件中内容的原因是您尚未设置占位符文本。相反,您的代码只需键入内容控件即可。
下面的代码应该可以帮助您入门:
Private Sub POAContentControl()
Dim rng As Range
Set rng = Selection.Range
With rng
.Text = "()"
.MoveStart wdCharacter, 1
.MoveEnd wdCharacter, -1
Dim cc As ContentControl
Set cc = .ContentControls.Add(wdContentControlText, rng)
cc.SetPlaceholderText Text:="________"
End With
End Sub
编辑:
要获得带下划线的空格,您可以将占位符文本样式修改为具有下划线,这将影响所有内容控件,或者在设置占位符文本后将下划线应用于特定控件。
Private Sub POAContentControl()
Dim rng As Range
Set rng = Selection.Range
With rng
.Text = "()"
.MoveStart wdCharacter, 1
.MoveEnd wdCharacter, -1
With .ContentControls.Add(wdContentControlText, rng)
.SetPlaceholderText Text:=" "
.Range.Font.Underline = wdUnderlineSingle
End With
End With
End Sub
我正在尝试使用宏自动生成预先存在的原始 .docx 表单,并且需要通过宏将纯文本内容控件插入表单的各个位置。在原始的 .docx 表单上,内容控制字段是 8 个带下划线的空格并被括号包围。在原来的表单中,当我点击内容控件时,我只需要点击一次,当我点击它并输入信息时,下划线空间消失,我只剩下我输入的文本和括号。如何使用 VBA 制作具有这些属性的内容控件?在我的宏生成文档中,我必须先单击内容控件中带下划线的空格,然后单击左侧的 3 个点才能输入数据。但是,当我在宏生成的文档中执行此操作时,下划线仍然存在。如果我在宏生成文档中的内容控件上单击一次,输入将添加到空格而不是替换它们。此外,您如何在内容控件中的空格下划线,以便在单击内容控件之前存在下划线,但在输入文本时下划线消失?括号不应在任何时候加下划线。
我尝试了下面的代码。我花了大约 2 个小时在谷歌上搜索东西试图找到解决方案,但没有成功。我也试过用对象来做,但是我丢失了那个代码而且似乎找不到它。我找到的目标代码也不起作用。
Private Sub POAContentControl()
With Selection
.TypeText Text:="("
.Range.ContentControls.Add (wdContentControlText)
.TypeText Text:=" "
.Font.UnderlineColor = wdColorAutomatic
.Font.Underline = wdUnderlineSingle
.EndKey unit:=wdLine 'Exits the Content Control
.Font.Underline = wdUnderlineNone
.TypeText Text:=")"
End With
End Sub
首先,原始内容控件中的文本几乎肯定不是 8 个带下划线的空格。如果是的话,下划线就不会消失。相反,它只是 8 个下划线。
您无法改写内容控件中内容的原因是您尚未设置占位符文本。相反,您的代码只需键入内容控件即可。
下面的代码应该可以帮助您入门:
Private Sub POAContentControl()
Dim rng As Range
Set rng = Selection.Range
With rng
.Text = "()"
.MoveStart wdCharacter, 1
.MoveEnd wdCharacter, -1
Dim cc As ContentControl
Set cc = .ContentControls.Add(wdContentControlText, rng)
cc.SetPlaceholderText Text:="________"
End With
End Sub
编辑:
要获得带下划线的空格,您可以将占位符文本样式修改为具有下划线,这将影响所有内容控件,或者在设置占位符文本后将下划线应用于特定控件。
Private Sub POAContentControl()
Dim rng As Range
Set rng = Selection.Range
With rng
.Text = "()"
.MoveStart wdCharacter, 1
.MoveEnd wdCharacter, -1
With .ContentControls.Add(wdContentControlText, rng)
.SetPlaceholderText Text:=" "
.Range.Font.Underline = wdUnderlineSingle
End With
End With
End Sub