1

我有两段的文档:第一个是纯文本 CC,第二个是重复部分 CC,里面有一个纯文本 CC。

我正在尝试将重复部分中 CC 的所有信息移动到 CC 的第一段中。到目前为止,我已经来到了这段代码:

 Sub first_paragraph()

    Dim x As Integer
    Dim xNames As String
    Dim xEntry As String

    xNames = ""

    With ActiveDocument.SelectContentControlsByTag("VP_pav")

        For x = 1 To .Count
            With .Item(x)
                If .Tag = "VP_pav" Then
                    xEntry = ActiveDocument.SelectContentControlsByTag("VP_pav").Item(x).Range.Text
                        ' "if" for removing comma before first entry
                         If xNames = "" Then
                            xNames = xEntry + xNames
                            Else
                            xNames = xEntry + ", " + xNames
                            End If
                    End If
                End With
            Next x
        End With

    ActiveDocument.SelectContentControlsByTag("pirm_pas").Item(1).Range.Text = xNames

End Sub

CC 在重复部分 CC(然后添加新部分)中生成的问题似乎获得了随机项目编号(我认为带有标签“示例”的第一个 CC 将获得项目编号 1,具有相同标签的第二个 CC 获得项目编号 2 等等。 ,但似乎并非如此)。

因为新生成的 CC 获取随机项目编号,所以第一段 CC 中的值是乱序的。

是否可以让新生成的CC获取序列号?如果它们不是连续的,他们如何获得项目编号?应该采取一些不同的方法吗?

我正在添加图片来说明我的情况:

在此处输入图像描述

PS 我正在删除我最近发布的关于在这种情况下正确变量顺序的问题,因为我确定它(可能)不是问题。

4

1 回答 1

1

使用显示的代码,没有什么可以告诉 Word 以任何顺序读取内容控件。在这种情况下,更好的方法是在 Repeaing Section 内容控件中循环内容控件。

以下示例假定RepSec已将 分配给Title重复部分内容控件:

 Sub first_paragraph()
    Dim xNames As String, xEntry as String
    Dim ccRepSec as Word.ContentControl
    Dim cc as Word.ContentControl

    xNames = ""

    Set ccRepSec = ActiveDocument.SelectContentControlsByTitle("RepSec").Item(1)    
    For Each cc in ccRepSec.Range.ContentControls
         If .Tag = "VP_pav" Then
              xEntry = cc.Range.Text
              If xNames = "" Then
                 xNames = xEntry & xNames
              Else
                 xNames = xEntry & ", " & xNames
              End If
         End If
    Next cc

    ActiveDocument.SelectContentControlsByTag("pirm_pas").Item(1).Range.Text = xNames    
End Sub
于 2018-10-19T16:04:18.320 回答