.insertcrossreference方法在输入时在word文档中引用之前删除空格

问题描述 投票:0回答:1

我有一些代码在文档中搜索一些独特的文本“(交叉引用表2.1)”,然后用表2.1的交叉引用替换该文本。代码运行良好,除了在文档的一个部分中,插入交叉引用实际上删除了交叉引用之前的空格“”。例如,原始文本读取“引用(交叉引用表2.1)”变为“referTable2.1”时应该读取“引用表2.1”。这只发生在文档中的一个位置,似乎没有任何理由发生这种情况(即我的代码或单词模板中没有额外的“”,不应该有)。

Public Sub Master()
    Call ReplaceTextWithCrossReferenceToTable(wrdDoc, _
        "(cross reference Table 2.1)", "Table 2.1", wrdApp)
End Sub

Sub ReplaceTextWithCrossReferenceToTable(wrdDoc As Word.Document, _
        ReferenceText As String, ReferenceSource As String, _
        wrdApp As Word.Application)

    Dim wrdTables As Variant, intTableNames As Integer, j As Integer
    Dim k As Integer, RefValue As Integer
    wrdTables = wrdDoc.GetCrossReferenceItems("Table")
    For intTableNames = 1 To UBound(wrdTables)
        If InStr(wrdTables(intTableNames), ReferenceSource) Then
            RefValue = intTableNames
        End If
    Next i
    If RefValue = 0 Then Exit Sub
    With wrdDoc.Content.Find
        .Text = ReferenceText
        .Format = False
        .Wrap = 0
        Do While .Execute
            k = k + 1
        Loop
    End With
    For j = 1 To k
        With wrdApp.Selection
            .Find.Text = ReferenceText
            .Find.Wrap = 1 'wdFindContinue
            .Find.Execute FindText:=ReferenceText
            .Delete
            .InsertCrossReference "Table", wdOnlyLabelAndNumber, RefValue, True
        End With
    Next j
End Sub
vba ms-word word-vba
1个回答
0
投票

您可以为空格字符的存在添加测试。

If not <range>.Previous(unit:=wdWord).Characters.Last = Chr$(32) Then
    <range>.InsertBefore text = Chr$(32)
End If

您将用代表您刚插入的交叉引用的范围替换的位置。

© www.soinside.com 2019 - 2024. All rights reserved.