2016-09-30 74 views
0

另一個可能棘手的挑戰,爲您的專家!字自動更正 - AddRichText虛假字符和字符串到範圍轉換

我試圖開發一個宏,將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,但刪除它沒有效果(只是刪除黑箱符號之前的字符)。

第二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 

在任的這些任何援助將是多少a​​ppreciated

乾杯

...史蒂夫

回答

1

你的第一個例子,testAddRichText1,幾乎是正確的。它失敗了,因爲儘管您已經認識到需要從ShortText中刪除尾隨字符,但對於longText卻沒有這樣做。

要縮短範圍,請使用MoveEnd方法移動範圍的末尾。在這種情況下,您需要將範圍的末尾移回一個字符以刪除單元格標記的末端。

在第二個示例testAddRichText2中,代碼失敗,因爲您尚未將範圍正確地分配給變量LongTextrng。當值分配給一個對象變量,你需要使用set命令,如下所示:

Set objVar = object 

這是因爲長文本尚未聲明,所以被認爲是變體沒有在你的第一次嘗試失敗。

下面的代碼會爲你工作:

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 
+0

感謝蒂姆。這真棒,完美的作品!感謝您的解釋和更優雅的編碼!乾杯......史蒂夫 – SteveP