2012-01-02 14 views
0

別のtxtファイルの単語に一致する単語のフォーマットを置き換えたいと思います。 私はいくつかのことを試みましたが、最終的には私が最も効果的だと思う解決策になりました。メイン辞書が無効になっていないので、ここでMS Word 2003 VBA - (スペル以外の)スペルミスのフォーマットを置換するためのカスタム辞書のみを使用してください

Sub format_dict_words() 

Dim rngWord As Range 

DoEvents 

For Each rngWord In ActiveDocument.Range.Words 
DoEvents 
If Application.CheckSpelling(_ 
    Word:=rngWord.Text, _ 
    customdictionary:="I:\NATUR\Kay\DIC\test.DIC", _ 
    MainDictionary:="I:\NATUR\Kay\DIC\test.DIC", _ 
    IgnoreUppercase:=False) = True Then 
    rngWord.Bold = True 
End If 
Next rngWord 

End Sub 

は、私は、非スペルミスが本当にだけだろう、メイン辞書を無効にする必要があるだろう...、満足に動作していないコードです私のテストと合っている.DIC。 また、スペルチェックでは単語の文字以外のすべてを除外しているように見えるため、これらの記号はエラーではなく太字として扱われます。たぶん私はこの問題を扱うために正規表現を挿入する必要があります。

答えて

0

私はこの質問に自分自身で答えるでしょう:私は本当にこれのための解決策はありません - 私が見つけたものから判断できる限りあなたが接近していた

'macro name: ReformatListMatches 
'purpose: compares words from document with words from file 
'author: kay cichini 
'date: 2012-01-04 
'licence: cc by-nc-sa 

'specifications: 
'before running the macro, add a commandbar called "mycombar" and assign the macro "ReformatListMatches" to it, 
'run line 8 one time, then disable it, then save file to a template (.dot) and store it at your templates' folder. 
'if you don't want a command bar, just skip the above part and don't run line 8! 

Sub ReformatListMatches() 

'CommandBars("mycombar").Controls(1).TooltipText = "calls procedure that re-formats words that match word list" 
'this sets tooltip info, run this only once (!!), otherwise you will be asked to save changes to the dot file 
'everytime you close a word doc. 

time_start = Timer() 

If MsgBox("Re-format matches?" & vbLf & " " & vbLf & "..may take some time" & vbLf & "..be patient! (the active window will be temporarily invisible to speed up process)", vbOKCancel + vbQuestion, "SpKursiv") = vbOK Then 

Dim vntArrWords As Variant 
Dim lngI As Long 
Dim strText As String 
Dim strPathFile As String 
Dim lngFN As Long 

strPathFile = "C:\LogoXP\SP_words_tab.txt" 
'the database with names to compare 

lngFN = FreeFile 
Open strPathFile For Binary As lngFN 
strText = Space(LOF(lngFN)) 
Get lngFN, 1, strText 
Close lngFN 

System.Cursor = wdCursorWait 

vntArrWords = Split(strText, vbCrLf, -1, 1) 

ActiveWindow.Visible = False 

With ActiveDocument.Content.Find 
    .ClearFormatting 
    .Forward = True 
    .Wrap = wdFindContinue 
    .Format = True 
    .MatchCase = False 
    .MatchWholeWord = True 
    .MatchWildcards = False 
    .MatchSoundsLike = False 
    .MatchAllWordForms = False 
    .Replacement.ClearFormatting 
    .Replacement.Text = "^&"    'replaces match with the original string (but with new format!) 
    .Replacement.Font.Italic = True  'here i determine the new format 
    For lngI = 0 To UBound(vntArrWords) 
    .Text = Trim(vntArrWords(lngI)) 
    .Execute Replace:=wdReplaceAll 
    Next 
End With 

ActiveWindow.Visible = True 

time_end = Timer() 

MsgBox "finished!" & vbLf & "(calculation time (mm:ss) = " & time_end - time_start & ")" 

Else: Exit Sub 
End If 

End Sub 
0

...ネットはメイン辞書は...

を除外することはできません。しかし、私は実際に同じことをして私のために十分よく働く全く異なる溶液に来ましたあなたの最初の解決策。そのトリックは、カスタム辞書をWordのデフォルトの "UProof"ディレクトリの外に置かなければならないことです。そうしないと、スペルチェックのためにWordがすべての辞書をまとめてしまいます。 2番目のソリューションと同様に、カスタム辞書に単語を手動で追加する必要があります。メモ帳を使用します。

したがって、カスタム辞書を別の場所(「マイドキュメント」など)にコピーします。 Office 2010のカスタム辞書は、C:\Users\USERNAME\AppData\Roaming\Microsoft\UProofにあります。次に、Wordの辞書一覧からカスタム辞書を削除します。 Office 2010では、この一覧は[ファイル]> [オプション]> [校正]> [カスタム辞書]にあります。リストからカスタム辞書を選択し、[削除]をクリックします。

Option Explicit 

Sub CustomDictStyle() 

    Dim rngWord As Range 

    DoEvents 

    For Each rngWord In ActiveDocument.Range.Words 

     DoEvents 

     'Include words in custom dictionary 

     If Application.CheckSpelling(_ 
     Word:=rngWord.Text, _ 
     CustomDictionary:="C:\Users\USERNAME\Documents\CUSTOM.dic", _ 
     IgnoreUppercase:=False) = True Then 

      'Now exclude words in the main dictionary 

      If Application.CheckSpelling(_ 
       Word:=rngWord.Text, _ 
       IgnoreUppercase:=False) = False Then 

        'Apply style as desired 
        rngWord.Style = "CustomDict" 

      End If 

     End If 

    Next rngWord 

End Sub 

この愚かなフォーラムは私がアップロードさせません。

は今ここにのみ再配置カスタム辞書の単語に(CustomDictと呼ばれるこの場合はカスタムスタイル)フォーマットを適用すべき修正されたVBAのコードですイメージですが、ここにはlink to what it should look likeがあります。赤い "CustomDict"スタイルは、私がカスタム辞書に追加した "fleurghy"という単語に適用されています。

+0

やあ、応答のための多くのおかげで - しかし、私は手動でカスタム辞書を削除すると思いますリストからはオプションがありません。これをプログラマチックに行う方法はありませんか? – Kay

0

@Jeremyは、私はあなたのコードを適用しようとしたが、何とかmydict.txt内のすべての単語を新たにフォーマットされていません。..

Option Explicit 

Sub CustomDictStyle() 

    Dim StartTime As Double, EndTime As Double 
    Dim rngWord As Range 

    'Stores start time in variable "StartTime" 
    StartTime = Timer 

    'remove custom dictionaries 
    CustomDictionaries.ClearAll 

    DoEvents 

    For Each rngWord In ActiveDocument.Range.Words 

     DoEvents 

     'Include words in custom dictionary 

     If Application.CheckSpelling(_ 
     Word:=rngWord.Text, _ 
     CustomDictionary:="C:\Dokumente und Einstellungen\kcichini\Eigene Dateien\Stuff\mydict.txt", _ 
     IgnoreUppercase:=False) = True Then 

      'Now exclude words in the main dictionary 

      If Application.CheckSpelling(_ 
       Word:=rngWord.Text, _ 
       IgnoreUppercase:=False) = False Then 

        'Apply style as desired 
        rngWord.Bold = True 

      End If 

     End If 

    Next rngWord 

    'restore custom dictionary 
    CustomDictionaries.Add FileName:="BENUTZER.DIC" 

    'Stores end time in variable "EndTime" 
    EndTime = Timer 

    'Prints execution time in the debug window 
    MsgBox ("Execution time in seconds: " & EndTime - StartTime) 

End Sub 
関連する問題