Word VBA質問箱 IV

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

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


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

【278】Word文書でスタイルをチェックするマクロ ZOO 05/4/6(水) 13:52 質問[未読]
【279】Re:Word文書でスタイルをチェックするマクロ H. C. Shinopy 05/4/6(水) 20:55 回答[未読]
【281】Re:Word文書でスタイルをチェックするマクロ ZOO 05/4/8(金) 14:00 質問[未読]
【282】Re:Word文書でスタイルをチェックするマクロ H. C. Shinopy 05/4/8(金) 23:43 回答[未読]
【283】Re:Word文書でスタイルをチェックするマクロ ZOO 05/4/11(月) 10:05 質問[未読]
【284】Re:Word文書でスタイルをチェックするマクロ ZOO 05/4/11(月) 10:27 質問[未読]
【285】Re:Word文書でスタイルをチェックするマクロ H. C. Shinopy 05/4/11(月) 22:59 回答[未読]

【278】Word文書でスタイルをチェックするマクロ
質問  ZOO  - 05/4/6(水) 13:52 -

引用なし
パスワード
   お世話になっております。

アウトライン表示で、右側にスタイルを表示させることが出来ますが、

例えば・・・・

見出し1 
というスタイルしか使用してはいけない文書があった場合、
アウトライン表示で、見出し1 以外のスタイルが存在すると、
その該当する行の色が変わるとかして、一目でわかる様なことがしたいのですが、
可能なのでしょうか?

検索機能で、スタイルを検索したのを自動マクロで記憶させると以下の様になりますが、
違う文書で実行しようとすると、まったくなクロが動きません。

Sub Macro1()

  Selection.Find.ClearFormatting
  Selection.Find.Style = ActiveDocument.Styles("見出し 1")
  Selection.Find.ParagraphFormat.Borders.Shadow = False
  With Selection.Find
    .Text = ""
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = True
  End With
  
End Sub


どの様に書けばいいでしょうか。

何卒よろしくお願いします。

【279】Re:Word文書でスタイルをチェックするマクロ
回答  H. C. Shinopy  - 05/4/6(水) 20:55 -

引用なし
パスワード
   まずは、マイクロソフト社の下記ページを参考にしてみて下さい。

「Word 2002 のスタイル設定で使用するマクロを作成する −
さまざまな書式が設定された複数のWord文書を扱うことに
うんざりしたことはありませんか。
ここでは、Word文書のスタイルの管理に役立つ3つのマクロの作成方法に
ついて説明します。」

http://office.microsoft.com/ja-jp/assistance/HA010429641041.aspx

ここのページにあるマクロ
「ListStyles()」・「ChangeDocumentStyles()」で
手間が軽減できるでは?

【281】Re:Word文書でスタイルをチェックするマクロ
質問  ZOO  - 05/4/8(金) 14:00 -

引用なし
パスワード
   H. C. Shinopy さん

サイト情報をありがとうございました。
残念ですが、目的の方向が少し違うので、
掲載されているマクロを書き換えて・・・というのはちょっと私のは無理な様です。
おそらく、検索機能でスタイルは検索可能なのでマクロに詳しい方であれば、
そんなに難しい記述ではないのかな?と思い相談させていただいています。

よろしくお願いします.

【282】Re:Word文書でスタイルをチェックするマクロ
回答  H. C. Shinopy  - 05/4/8(金) 23:43 -

引用なし
パスワード
   「見出し1というスタイルしか使用してはいけない文書があった場合・・・」ということですが、
[見出し1]がありながら、[標準]や[本文]のない文書があるとは思えませんので、
文書の中にある段落を順々に条件式で調べるのはどうでしょうか?
他に考えられないので・・・

Sub myStyle()
 Dim myPara As Paragraph
 '
 For Each myPara In ActiveDocument.Paragraphs ' 文書全体を処理する場合
 Rem For Each myPara In Selection.Paragraphs ' 選択した範囲だけ処理する場合
  If InStr(myPara.Style, "見出し") > 0 Then
   Rem [見出し]スタイルの内、[見出し 1]以外の場合、
   Rem 文字の色を赤色にする。
   If myPara.Style <> "見出し 1" Then
    myPara.Range.Font.ColorIndex = wdRed
   End If
  End If
 Next myPara
End Sub

【283】Re:Word文書でスタイルをチェックするマクロ
質問  ZOO  - 05/4/11(月) 10:05 -

引用なし
パスワード
   H. C. Shinopy さん
ありがとうございます。
素晴らしいですね。
まさに、求めていた動きとしてはこの通りです。

>[見出し1]がありながら、[標準]や[本文]のない文書があるとは思えませんので・・・
非常にごもっともなご指摘ありがとうございます。
例えば・・・ということで簡単に例えを書き過ぎました。
すみません。
実は、独自のスタイルが20種類くらい有り、
それ以外のスタイルが存在していないかどうか、
確認出来るマクロが出来ればいいな。と思っています。

H. C. Shinopy さんのマクロを手本に試行錯誤していますが、
なかなかうまくいきません。
何か良い方法がありましたらご教示お願いします。

【284】Re:Word文書でスタイルをチェックするマクロ
質問  ZOO  - 05/4/11(月) 10:27 -

引用なし
パスワード
   “標準”と“見出し1”を赤くする場合、以下の様に書けばOKでした。

   If myPara.Style = "標準" Then
    myPara.Range.Font.ColorIndex = wdRed
   End If

   If myPara.Style = "見出し1" Then
    myPara.Range.Font.ColorIndex = wdRed
   End If


全てのスタイルで、上記のIF文を作成すれば動きますが、
簡素化した書き方がわかりません。
テーブルを使用するという方法もありですか?

【285】Re:Word文書でスタイルをチェックするマクロ
回答  H. C. Shinopy  - 05/4/11(月) 22:59 -

引用なし
パスワード
   多岐の条件については、Select Case ステートメントのほうが便利です。
これにCase節を追加して条件を増やすことができます。
例を挙げると・・・   

Select Case myPara.Style = "標準"
 Case "標準", "見出し1"
  myPara.Range.Font.ColorIndex = wdRed
 Case "見出し 2"
  myPara.Range.Font.ColorIndex = wdBlue
 Case Else
  myPara.Range.Font.ColorIndex = wdGreen
End Select

因みに、指定できるColorIndexの色は・・・
wdBlack wdBlue wdBrightGreen wdDarkBlue
wdDarkRed wdDarkYellow
wdGray25 wdGray50 wdGreen wdPink wdRed
wdTeal wdTurquoise wdViolet
wdWhite wdYellow

また、ヘルプに載っている使用例は下の通り。
条件追加の参考にして頂ければ幸いです。

「次の例は、Select Case ステートメントを使って、変数の値を評価します。
この例では、変数の値は必ず 2 番目の Case 節と一致します。
したがって、2 番目の Case 節に記述されたステートメントだけが実行されます。」

Dim Number
Number = 8            ' 変数を初期化します。

Select Case Number        ' Number を評価します。
 Case 1 To 5            ' Number の値が 1 〜 5 の場合。
  Debug.Print "1 から 5 の間"
 ' この例では、Number に 8 を代入しているため、
 ' True と評価されるのは次の Case 節だけです。
 Case 6, 7, 8            ' Number の値が 6 〜 8 の場合。
  Debug.Print "6 から 8 の間"
 Case 9 To 10 And Number < 11    ' Number の値が 9 または 10 の場合。
  Debug.Print "9 または 10"
 Case Else              ' その他の値の場合。
  Debug.Print "1 から 10 以外の数値"
End Select

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