前回と前々回の記事でスペルチェック、文章校正に関するWordマクロを扱いました。
元々はMsdn フォーラムにあった質問「WordやOutlookで使用できる「スペルチェックと文章校正」の文法チェック結果をVBAから取得する方法はありますか」が切っ掛けで、その質問は“日本語文字列の文章校正結果を取得したいけどGetSpellingSuggestionsメソッドではエラーになる”というようなものでした。
試しに簡単な単語でテストしたところ、たしかにGetSpellingSuggestionsメソッドを実行した時点で[実行時エラー ‘4625’:辞書を開くことができません。]が発生し、修正候補を取得することができませんでした。
(辞書の指定を色々試してみましたが、どれも同様のエラーが発生しました。)
Public Sub Sample() Dim dic As Word.Dictionary With Selection.Range '文字列「人事移動」を選択 '※ 下記すべて[実行時エラー '4625':辞書を開くことができません。] Debug.Print .GetSpellingSuggestions.Count 'Debug.Print .GetSpellingSuggestions(MainDictionary:="Nihongo").Count 'Debug.Print .GetSpellingSuggestions(MainDictionary:="日本語").Count 'Debug.Print .GetSpellingSuggestions(MainDictionary:="Japanese").Count 'Debug.Print .GetSpellingSuggestions(MainDictionary:=wdJapanese).Count 'Debug.Print .GetSpellingSuggestions(CustomDictionary:="Nihongo").Count 'Debug.Print .GetSpellingSuggestions(CustomDictionary:="日本語").Count 'Debug.Print .GetSpellingSuggestions(CustomDictionary:="Japanese").Count 'Debug.Print .GetSpellingSuggestions(CustomDictionary:=wdJapanese).Count 'Set dic = Application.Languages(.LanguageID).ActiveGrammarDictionary 'Debug.Print .GetSpellingSuggestions(MainDictionary:=dic).Count 'Debug.Print .GetSpellingSuggestions(CustomDictionary:=dic).Count 'Debug.Print .GetSpellingSuggestions(MainDictionary:=dic.Path & Application.PathSeparator & dic.Name).Count 'Debug.Print .GetSpellingSuggestions(CustomDictionary:=dic.Path & Application.PathSeparator & dic.Name).Count End With End Sub
ここで気になるのは「GetSpellingSuggestions」メソッドであるということ。
Wordの開発者用リファレンスには“指定範囲内の最初の単語の修正候補を表す SpellingSuggestions コレクションを返します。”とありますが、DocumentオブジェクトにSpellingErrorsプロパティ(指定した文書または範囲内にある、スペル ミスとして識別される単語を表す ProofreadingErrors コレクションを取得します。)とGrammaticalErrorsプロパティ(指定された文書で文法上の誤りが見つかった文を表す ProofreadingErrors コレクションを取得します。)、CheckSpellingメソッド(指定された文書または範囲のスペル チェックを行います。)とCheckGrammarメソッド(指定された文書または範囲の文章校正を行います。)が用意されていることを考えると、本来であれば文法上の誤りの修正候補を取得するには「GetGrammaticalSuggestions」なんてメソッドを使う必要があったのではないかと推測します。
といっても、GetGrammaticalSuggestionsメソッドなんてものは用意されていないので、それ以外の何らかの方法を用いる必要があったため、前回の記事では苦肉の策として、CommandBars(“Grammar”)にあるコントロールの中からIDが「0」のものを抜き出す方法を使ったのでした。
何故GetGrammaticalSuggestionsメソッドが無いのか?こういった細かいところが微妙に中途半端だなー、と感じるのですが、無いものは無いのでしょうがないですね・・・。
■ 関連Webページ
・英語のスペルミスを列挙して修正候補をコメントとして追加するWordマクロ
//www.ka-net.org/blog/?p=4508
・日本語の文法上の誤りを列挙して修正候補をコメントとして追加するWordマクロ
//www.ka-net.org/blog/?p=4510
・Range.GetSpellingSuggestions メソッド (Word)(機械翻訳)
http://msdn.microsoft.com/ja-jp/library/ff196525.aspx
・GetSpellingSuggestions メソッドでは、 Word での英語以外の言語提案の一覧が表示されません。
http://support.microsoft.com/kb/292108/ja
・テキストが正しくフラグ付きプログラムを使用して、スペルをチェックして、言語の辞書を指定するとスペル ミスとして
http://support.microsoft.com/kb/832124/ja
・Word で文章校正の対象についてのよく寄せられる質問
http://support.microsoft.com/kb/290943/ja
・GetGrammaticalSuggestions?
http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/019f262a-9936-461f-ac2a-c9eb3c4ad738
この記事へのコメントはありません。