Word (VBA)

Word VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : Word 2010)
複数種類の文字サイズを変更したいが・・・
投稿日時: 20/07/26 23:17:21
投稿者: takaisasking

文書内の3種類の文字に変更を加えたいのですが、
以下の記述では最初の種類の文字("/")しか変更できませんでした。
どこがおかしいか教えてください。
よろしくお願いします。
 
Dim myArray As Variant, i As Long
myArray = Array("/", "○", "ー") '←3種類の文字
Selection.WholeStory
For i = 0 To 2
With Selection.Find
    .Text = myArray(i)
    Do While .Execute
        Selection.Font.Size = 10 '←サイズを変更したい
    Loop
End With
Next i

回答
投稿日時: 20/07/27 09:32:10
投稿者: sk

引用:
文書内の3種類の文字に変更を加えたいのですが、
以下の記述では最初の種類の文字("/")しか変更できませんでした。
どこがおかしいか教えてください。

引用:
myArray = Array("/", "○", "ー") '←3種類の文字
Selection.WholeStory
For i = 0 To 2
With Selection.Find
    .Text = myArray(i)
    Do While .Execute
        Selection.Font.Size = 10 '←サイズを変更したい
    Loop
End With

i = 0 回目のループが完了した時点における選択範囲が
文書内の最後の "/" のみであり、その中に "○" や "ー"
といった文字列は当然含まれていないため。
 
(修正例)
-------------------------------------------------------------
 
Dim myArray As Variant, i As Long
myArray = Array("/", "○", "ー")
With ActiveDocument.Range.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = False
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .Replacement.Font.Size = 10
    For i = 0 To 2
        .Text = myArray(i)
        .Replacement.Text = myArray(i)
        .Execute Replace:=wdReplaceAll
    Next i
End With
 
-------------------------------------------------------------

投稿日時: 20/07/27 20:47:35
投稿者: takaisasking

sk さん、ありがとうございます。
 
With Selection.Find ←これだと
ご指摘の通り、1回目の作業で
最後の文字のみが選択されていることが
わかりました。
従って、
With ActiveDocument.Range.Find
これで全範囲から該当する文字を
検索してくれるわけですね。
原因がわかりました。
どうもありがとうございました。
また、よろしくお願いします。

回答
投稿日時: 20/07/28 09:03:34
投稿者: sk

補足:

引用:
myArray = Array("/", "○", "ー")

引用:
For i = 0 To 2

配列の要素の数が変更される可能性がある(もしくは可変である)
のであれば、以下のように書き換えるか、For Each 文を使用する
ようになさればよいと思います。
 
--------------------------------------------------------------
 
For i = LBound(myArray) To UBound(myArray)
 
--------------------------------------------------------------

トピックに返信