前回の記事の関連で、今度は日本語の文法上の誤りを列挙して修正候補をコメントとして追加するマクロを考えてみました。
Option Explicit Public Sub ChkGrammaticalErrors() '日本語の文法上の誤りを列挙して修正候補をコメントとして追加するWordマクロ Dim rngGrammaticalError As Word.Range Dim rngTmp As Word.Range Dim ctl As Office.CommandBarControl Dim i As Long, cnt As Long Dim s As String Set rngTmp = Selection.Range '文法上の誤りを列挙 For Each rngGrammaticalError In ActiveDocument.GrammaticalErrors Select Case rngGrammaticalError.LanguageID '日本語のみ処理 Case wdJapanese For i = 1 To Len(rngGrammaticalError.Text) cnt = 0 '初期化 rngGrammaticalError.Characters(i).Select '修正候補をCommandBarControlから取得 For Each ctl In Application.CommandBars("Grammar").Controls '[IDが「0」のもの = 修正候補]として取得 If ctl.ID = 0 Then If cnt < 1 Then s = ctl.Caption Else s = s & "," & ctl.Caption End If cnt = cnt + 1 End If Next If cnt > 0 Then Exit For Next End Select 'エラー箇所に修正候補をコメントとして追加 ActiveDocument.Range.Comments.Add rngGrammaticalError, s Next rngTmp.Select End Sub
■ 関連Webページ
・GetSpellingSuggestionsメソッドで文法上の誤りの修正候補は取得できない?
//www.ka-net.org/blog/?p=4517
・WordやOutlookで使用できる「スペルチェックと文章校正」の文法チェック結果をVBAから取得する方法はありますか
http://social.msdn.microsoft.com/Forums/ja-JP/vbajp/thread/74ea256d-8843-4596-b6ef-6c2f829d24f2
・文法とスタイルの規則のオプションを選択する (日本語)
http://office.microsoft.com/ja-jp/HA010203200.aspx
参考になりましたので、ブログを応援したいと思いますが、記事下の「ブログランキング」に貼ってある2つのバナーをクリックすれば、応援できるのでしょうか?
> km様
ブログ管理者のきぬあさです。
コメントいただき、ありがとうございます。
> 参考になりましたので、ブログを応援したいと思いますが、記事下の「ブログランキング」に貼ってある2つのバナーをクリックすれば、応援できるのでしょうか?
はい!
バナーをクリックいただくとランキングに反映され、当ブログの順位が上がると記事更新のモチベーションが上がります(^^)
Word2016では、仕様の変更によりこちらのVBAはうまく動作しません。
試行錯誤したのですがまだ解決に至っていません。
Word2016で日本語の文法上の誤りを取得する方法をもしご存じでしたらお教えいただけませんでしょうか。
> toowaki様
当ブログの管理者です。
お問い合わせいただいたWord 2016で文法上の誤りが取得できない件につきまして、私の方でも確認したところ、たしかに2016では当マクロが動作しませんでした。
恐らくWordの仕様が変更されたためだと思われます。
別案として、UI AutomationやIAccessibleを使って、
1.誤りの指摘箇所を右クリックした際に表示される「表現の推敲」メニューから無理やり取得する。
2.「文章校正」を実行した際に表示される「エディター」作業ウィンドウから無理やり取得する。
といった方法が考えられますが、どちらも処理が複雑かつ不安定になるでしょう。
「表現の推敲」メニューがCommandBarControlとして取得できるのであれば道も見えてきますが、古いオブジェクトモデルであるためこちらも難しそうです。
OfficeのUpdateによりいつの間にか直っていました。
報告のみですみませんが、以上です。