Vba 将文档中表格中的格式化条目添加到自动更正库

Vba 将文档中表格中的格式化条目添加到自动更正库,vba,ms-word,autocorrect,Vba,Ms Word,Autocorrect,我正在尝试将MSWord 2016文档中的表格中的格式化条目添加到自动更正库(格式化条目通常存储在normal.dotx中) 在文档中,我有一个包含两列的表,左列为短文本,右列为自动更正条目的格式化长文本 我有一个工作宏,用于使用行AutoCorrect.Entries.Add Name:=ShortText,Value:=LongText存储未格式化的文本 我正在尝试修改它,以使用AutoCorrect.Entries.AddRichText ShortText,longtext函数,然后该函

我正在尝试将MSWord 2016文档中的表格中的格式化条目添加到自动更正库(格式化条目通常存储在normal.dotx中)

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

我有一个工作宏,用于使用行
AutoCorrect.Entries.Add Name:=ShortText,Value:=LongText

存储未格式化的文本 我正在尝试修改它,以使用
AutoCorrect.Entries.AddRichText ShortText,longtext
函数,然后该函数将拾取表中的字体和斜体属性

我尝试了两种方法

FIRST-testAddRichText1

这是代码(去掉了一些化妆品)

子测试ddrichtext1()
设置oDoc=ActiveDocument
对于i=1到oDoc.Tables(2).Rows.Count
如果oDoc.Tables(2).Rows(i).Cells(1).Range.Characters.Count>1,则
ShortText=oDoc.Tables(2).单元格(行=i,列=1)
ShortText=左(ShortText,Len(ShortText)-2)“移除尾部CR和LF
longtext=oDoc.Tables(2).单元格(行=i,列=2)
StatusBar=“添加”&ShortText&“=”&longtext.Text
AutoCorrect.Entries.AddRichText短文本、长文本
如果结束
接下来我
MsgBox“完成”
端接头
使用此代码,从单元格中提取的文本末尾有许多无法打印的字符,大部分是Chr(13)字符。我试着在字符串上运行一个清理器来删除所有不可打印的字符,但是有一个东西是不会消失的,当使用自动更正时,它会在已更正文本的末尾出现一个黑框。我想这是表格单元格中的某种密码。尝试打印它的ASC值返回13,但删除它没有效果(只是删除黑盒符号之前的字符)

第二次测试ddrichtext2

我尝试在工作模型中将斜体添加到文本字符串中,然后将其与AddRichText方法一起使用。AddRichText需要一个范围,但我无法将文本字符串转换为范围

这是密码

子测试ddrichtext2()
设置oDoc=ActiveDocument
模糊拉伸范围
对于i=1到oDoc.Tables(2).Rows.Count
如果oDoc.Tables(2).Rows(i).Cells(1).Range.Characters.Count>1,则
ShortText=oDoc.Tables(2).单元格(行=i,列=1)
短文本=左(短文本,长(短文本)-2)
longtext=oDoc.Tables(2).单元格(行=i,列=2).范围
长文本=左(长文本,长(长文本)-2)
longtextring.Text=longtext'失败
longtextring.Italic=True
StatusBar=“添加”&ShortText&“=”&longtextring.Text
AutoCorrect.Entries.Add Name:=短文本,值:=长文本
如果结束
接下来我
MsgBox“完成”
端接头

您的第一个示例testAddRichText1几乎是正确的。它失败了,因为尽管您已经意识到需要从短文本中删除尾随字符,但对于长文本却没有这样做

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

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

Set objVar = object
这在您的第一次尝试中并没有失败,因为LongText尚未声明,因此被假定为一个变体

以下代码适用于您:

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

您的第一个示例testAddRichText1几乎是正确的。它失败了,因为尽管您已经意识到需要从短文本中删除尾随字符,但对于长文本却没有这样做

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

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

Set objVar = object
这在您的第一次尝试中并没有失败,因为LongText尚未声明,因此被假定为一个变体

以下代码适用于您:

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

谢谢你,蒂姆。这太棒了,效果非常好!感谢您的解释和更加优雅的编码!干杯…谢谢蒂姆。这太棒了,效果非常好!感谢您的解释和更加优雅的编码!干杯…史蒂文,你正在重新发明轮子,因为有两个免费的MVP产品可以做到这一点。Jay Freedman的AutoCorrect 2007.zip和Greg Maxey的AutoCorrect Backup Utility Manager。---除非有理由不使用其中一个,否则我会使用它们,而不是尝试编写自己的代码。Jay的代码没有被隐藏。这些实用程序已经在数千个系统上使用。谢谢Charles。在2016年,当我努力让它正常工作时,我本可以做到这一点:-)不过,看看Jay实用程序中的代码。这可能对我有帮助。他在这方面已经工作了15年多,从微软代码开始。我相信他已经拥有数千名用户,并且已经多次对其进行了调整,以确保它在所有系统上都能正常工作。你正在重新发明轮子,因为有两个免费的MVP产品可以做到这一点。Jay Freedman的AutoCorrect 2007.zip和Greg Maxey的AutoCorrect Backup Utility Manager。---除非有理由不使用其中一个,否则我会使用它们,而不是尝试编写自己的代码。Jay的代码没有隐藏。那些实用程序