Я пытаюсь добавить отформатированные записи из таблицы в документе MSWord 2016 в библиотеку автозамены (которая хранится в normal.dotx, как обычно для форматированных записей).
В документе у меня есть таблица, содержащая два столбца, в левом столбце есть короткий текст, а в правом столбце - отформатированный длинный текст для записей автозамены.
У меня есть рабочий макрос для хранения неформатированного текста с использованием строки AutoCorrect.Entries.Add Name:=ShortText, Value:=LongText
.
Я пытаюсь изменить его, чтобы использовать функцию AutoCorrect.Entries.AddRichText ShortText, longtext
, которая затем должна подбирать свойства шрифта и курсива в таблице.
Я пробовал два метода.
ПЕРВЫЙ - testAddRichText1
Вот код (удалена часть косметики)
Sub testAddRichText1()
Set oDoc = ActiveDocument
For i = 1 To oDoc.Tables(2).Rows.Count
If oDoc.Tables(2).Rows(i).Cells(1).Range.Characters.Count > 1 Then
ShortText = oDoc.Tables(2).Cell(Row:=i, Column:=1)
ShortText = Left(ShortText, Len(ShortText) - 2) 'remove the trailing CR and LF
longtext = oDoc.Tables(2).Cell(Row:=i, Column:=2)
StatusBar = "Adding " & ShortText & " = " & longtext.Text
AutoCorrect.Entries.AddRichText ShortText, longtext
End If
Next i
MsgBox "done"
End Sub
Используя этот код, в конце текста, извлеченного из ячейки, есть ряд непечатных символов, в основном Chr (13) 's. Я попытался запустить очиститель над строкой, чтобы удалить все непечатаемые символы, но есть что-то, что просто не исчезнет и вызывает черный ящик в конце исправленного текста при использовании автозамены. Я предполагаю, что это какой-то секретный код слова, который находится в ячейке таблицы. Попытка распечатать его значение ASC возвращает 13, но его удаление не имеет никакого эффекта (просто удаляются символы перед символом черного ящика).
ВТОРОЙ testAddRichText2
Я попытался добавить курсив к моей текстовой строке в своей рабочей модели, а затем использовать его с методом AddRichText. AddRichText ожидает диапазон, а мне не удалось преобразовать текстовую строку в диапазон.
Вот этот код
Sub testAddRichText2()
Set oDoc = ActiveDocument
Dim LongTextrng As Range
For i = 1 To oDoc.Tables(2).Rows.Count
If oDoc.Tables(2).Rows(i).Cells(1).Range.Characters.Count > 1 Then
ShortText = oDoc.Tables(2).Cell(Row:=i, Column:=1)
ShortText = Left(ShortText, Len(ShortText) - 2)
longtext = oDoc.Tables(2).Cell(Row:=i, Column:=2).Range
longtext = Left(longtext, Len(longtext) - 2)
LongTextrng.Text = longtext 'Fails
LongTextrng.Italic = True
StatusBar = "Adding " & ShortText & " = " & longtextrng.Text
AutoCorrect.Entries.Add Name:=ShortText, Value:=LongTextrng
End If
Next i
MsgBox "done"
End Sub