Word自动更正 - AddRichText虚假字符和字符串到范围转换

时间:2016-09-30 08:15:09

标签: word-vba autocorrect

对你们来说,另一个可能是棘手的挑战!

我正在尝试开发一个宏,将MSWord 2016文档中的表格中的格式化条目添加到自动更正库(通常用于格式化条目存储在normal.dotx中)。

在文档中我有一个包含两列的表,左列有短文本,右列有自动更正条目的格式化长文本。

我有一个宏可以使用行AutoCorrect.Entries.Add Name:=ShortText, Value:=LongText存储未格式化的文本。我正在尝试修改它以使用AutoCorrect.Entries.AddRichText ShortText, longtext函数,然后该函数应该在表中选取字体和斜体属性。

我尝试了两种方法,每种方法都有一个问题我无法找到解决方案。详情如下......

FIRST - 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)。我已经尝试在字符串上运行一个清理器来删除所有不可打印的字符,但是当使用自动更正时,有一些东西不会消失并在更正的文本末尾导致黑盒子。我假设它是表格单元格中的某种秘密字代码。尝试打印它的ASC值会返回13,但删除它无效(只需删除黑盒符号前的字符)。

SECOND 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

非常感谢对这两种方面的任何帮助。

干杯

...史蒂夫

1 个答案:

答案 0 :(得分:1)

你的第一个例子testAddRichText1几乎是正确的。它失败了,因为尽管你已经认识到需要从ShortText中删除尾随字符,但你没有为longText做同样的事情。

要缩短范围,请使用MoveEnd方法移动范围的末尾。在这种情况下,您需要将范围的末尾移回一个字符以移除单元格标记的结尾。

在第二个示例testAddRichText2中,代码失败,因为您没有正确地将范围分配给变量LongTextrng。为对象变量赋值时,需要使用Set命令,如下所示:

Set objVar = object

这在您第一次尝试时没有失败,因为LongText尚未声明,因此被假定为Variant。

以下代码适合您:

Sub AddRichTextAutoCorrectEntries()
    Dim LongText                    As Range
    Dim oRow                        As Row
    Dim ShortText                   As String

    For Each oRow In ActiveDocument.Tables(2).Rows
        If oRow.Cells(1).Range.Characters.Count > 1 Then
            ShortText = oRow.Cells(1).Range.Text
            ShortText = Left(ShortText, Len(ShortText) - 2)
            'assign the range to the variable
            Set LongText = oRow.Cells(2).Range
            'move the end of the range back by 1 character
            LongText.MoveEnd wdCharacter, -1
            StatusBar = "Adding " & ShortText & " = " & LongText.Text
            AutoCorrect.Entries.AddRichText Name:=ShortText, Range:=LongText
        End If
    Next oRow
End Sub