Метод .insertcrossreference удаляет пробел перед ссылкой в ​​текстовом документе при вводе - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть некоторый код, который ищет в документе какой-то уникальный текст «(перекрестная ссылка на таблицу 2.1)», а затем заменяет этот текст перекрестной ссылкой на таблицу 2.1.Код работает хорошо, за исключением того, что в одном разделе документа вставка перекрестной ссылки фактически удаляет пробел "" перед перекрестной ссылкой.Например, исходный текст, читающий «Refer (таблица перекрестных ссылок 2.1)», становится «referTable2.1», когда он должен читать «см. Table2.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

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете добавить тест на наличие пробела.

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

Где вы замените диапазон, представляющий перекрестную ссылку, которую вы только что вставили.

...