2016-09-30 10 views
0

もう一つの難しい課題はあなたのためです!Wordのオートコレクト - AddRichTextスプリアス文字と文字列を範囲に変換

MSWord 2016文書の表から書式設定された項目を追加するためのマクロを開発しようとしています(書式設定された項目の通常どおりnormal.dotxに格納されています)。

文書には、2つの列を含む表があります。左側の列には短いテキストがあり、右側の列には、autocorrectエントリの書式付きの長いテキストがあります。

AutoCorrect.Entries.Add Name:=ShortText, Value:=LongTextという行を使って、フォーマットされていないテキストを保存するマクロがあります。私はAutoCorrect.Entries.AddRichText ShortText, longtext関数を使用するように変更しようとしています。この関数は、テーブルのフォントとイタリックプロパティを取得する必要があります。

私は2つの方法を試しましたが、それぞれ解決策が見つからないという問題があります。

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 

これらのいずれかにどのような援助が

乾杯

ずっとappreciatedだろう...スティーブ

答えて

1

あなたの最初の例では、testAddRichText1は、ほとんど正しいです。 ShortTextから末尾の文字を削除する必要があることは認識していますが、longTextでは同じことをしていないため、失敗します。

範囲を短くするには、MoveEndメソッドを使用して範囲の終わりを移動します。この場合、範囲の終わりを1文字戻して、セルマーカーの終わりを削除する必要があります。

2番目の例の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

関連する問題