"Rich text controls cannot be applied here" 尝试添加多个嵌套内容控件时

"Rich text controls cannot be applied here" when trying to add multiple nested content controls

我有一个 VSTO word 加载项,它可以让用户添加可能嵌套的内容控件 at/around 当前选择。我很难添加内容控件,即使在我认为应该能够添加的情况下也是如此。

以下 VBA 代码复制了空白文档中的一个问题:

Public Sub DoTest()
    AddControls "Test"
    AddControls "Test2"
    Application.Selection.MoveRight WdUnits.wdCharacter
    Application.Selection.MoveRight WdUnits.wdCharacter
    Application.Selection.TypeText " "
    AddControls "Test3"
    AddControls "Test4" 'ERROR: "Rich text controls cannot be applied here"
End Sub

Public Sub AddControls(ByVal name As String)
    Dim richTextControl1 As ContentControl
    Set richTextControl1 = Application.ActiveDocument.ContentControls.Add(wdContentControlRichText)

    richTextControl1.Tag = name
    richTextControl1.Title = name
    richTextControl1.SetPlaceholderText , , " "

    Application.Selection.SetRange richTextControl1.Range.Start, richTextControl1.Range.End
End Sub

在测试出错时,选择范围从 6 开始到 7 结束(这与 "Test3" 富文本内容控件的范围相同)。我在这里做错了什么?

我知道 TestTest2 控件在创建时围绕着段落(由内容控件表示为白色),并且 Application.Selection.TypeText " " 指令在段落之外内容控件导致 TestTest2 被拉入段落内部(由内容控件变灰表示)。创建 Test3 时,它也在段落内部。这可以通过将文档另存为 XML 并在您喜欢的文本编辑器中阅读文件来验证。

我可以通过在添加子内容控件之前在父内容控件中键入 space,然后删除之后的 space 来解决此问题。但是,这会强制子内容控件始终位于段落内(作为 "grey" 控件)。这是不可接受的,因为用户需要能够在内容控件内插入表格(如果内容控件位于段落内,这是不可能的,因为段落不能包含表格)

我明白问题出在哪里了。显然,Word 很难将 whitespace 作为占位符文本。尝试插入 Test4 内容控件时,制表符和 space 的任意组合都会导致错误。

解决方法是使用不间断的 space (Chr(160)) 而不是正常的 space 作为占位符文本。 Word 好像把它当作普通字符来处理了。