Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


275 / 308 ツリー ←次へ | 前へ→

【115】フォントチェック ryu 04/7/7(水) 11:33 質問[未読]
【116】Re:フォントチェック M 04/7/12(月) 12:32 発言[未読]
【121】Re:フォントチェック H. C. Shinopy 04/7/28(水) 22:27 回答[未読]

【115】フォントチェック
質問  ryu E-MAIL  - 04/7/7(水) 11:33 -

引用なし
パスワード
   Word文書のフォントをチェックするマクロを作ったのですが、
非常に時間がかかり使い物になりません。
例えば、1バイトずつ、MS明朝か?MSゴシックか?と判断して、
それ以外のフォントを使用していた場合、
蛍光ペンでその対象の文字に色を付けていくといった感じです。
これに近いことをされた方、いらっしゃいませんか?
何かアドバイスいただければ幸いです。

【116】Re:フォントチェック
発言  M  - 04/7/12(月) 12:32 -

引用なし
パスワード
   おつくりになられたマクロを開示していただけませんか?参考にしたいので。
 

【121】Re:フォントチェック
回答  H. C. Shinopy  - 04/7/28(水) 22:27 -

引用なし
パスワード
   ryuさんの作ったマクロは、おそらく次のようなものではないかと思われます。

Sub myFontNameCheck()
 Dim myCharacter As Range
 '
 Debug.Print Time
 Selection.HomeKey unit:=wdStory
 For Each myCharacter In ActiveDocument.Characters
  If myCharacter.Font.Name <> "MS 明朝" _
    And myCharacter.Font.Name <> "MS ゴシック" Then
   myCharacter.HighlightColorIndex = wdYellow ' 蛍光ペン書式
  End If
 Next myCharacter
 Debug.Print Time
 MsgBox "処理が終了しました。"
End Sub

2ページ半ほどの文書で、このマクロを実行すると、
私のボロ糞マシンで、処理時間は47〜48秒でした。
因みに「Application.ScreenUpdating = False/True」を上のマクロに追加し、
処理中に画面の更新をしない場合、43〜45秒でした。

私の貧弱な頭で考えたところ、
次の2点を試してみました。
しかし、下の件は だれでも考え付くことですので、
ryuさんは既に試しているかも知れません。

1.GoToステートメントで繰り返し処理をする。
(但し、終了条件の都合で、文書の末尾からチェックします。)

2.処理中は画面更新をしない。
(「Application.ScreenUpdating = False/True」を追加。
但し、処理が進んでいるのかどうか判らない。
スクロールバーは動くようですが・・・)

処理時間は27〜28秒でした。
劇的な効果があるとは、言えないようです。
何100ページもある文書なら、その差は大きいかも知れませんが・・・

Sub myFontNameCheck2()
 Dim myCount As Long
 '
 Debug.Print Time
 Application.ScreenUpdating = False
 Selection.EndKey unit:=wdStory
 myCount = Selection.MoveLeft(wdCharacter, 1, wdExtend)
myFontNameCheck2SubEntry:
 If myCount = 0 Then
  GoTo myFontNameCheck2SubExit
 End If
 '
 If Selection.Font.Name <> "MS 明朝" _
   And Selection.Font.Name <> "MS ゴシック" Then
  Selection.Range.HighlightColorIndex = wdYellow
 End If
 Selection.Collapse wdCollapseStart
 myCount = Selection.MoveLeft(wdCharacter, 1, wdExtend)
 GoTo myFontNameCheck2SubEntry
myFontNameCheck2SubExit:
 Application.ScreenUpdating = True
 Debug.Print Time
 MsgBox "処理が終了しました。"
End Sub

275 / 308 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
207144
(SS)C-BOARD v3.8 is Free