Word VBA質問箱 IV

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

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


770 / 886 ←次へ | 前へ→

【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

1,402 hits

【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 回答

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