对你们来说,另一个可能是棘手的挑战!
我正在尝试开发一个宏,将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
非常感谢对这两种方面的任何帮助。
干杯
...史蒂夫
答案 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