Word (VBA)

Word VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Word 2016)
指定範囲の文字列の指定の仕方について
投稿日時: 18/03/28 09:11:22
投稿者: さむさむ

いつもお世話になっています。
ワード文書に配置したAutoShapeに書き込んだ文字列のX番目の文字からY番目の文字の文字サイズを変更する方法で困っています。
エクセルであればCharacters(Start:=x,Length:=Z).textを指定して文字列のX番目からZ数の文字の書式変更ができるようですが、
このような方法にあたるWordでの方法がわからず困っています。
 
現在はSelection.Rang.Font.Sizeで行っていますが、この方法だとその都度指定のAutoSapeをSelectして
ActiveDocument.shapes(i).select
With Selection.Find
    .Text = "Word"
    Do While .Execute
        Selection.Range.Font.size = 8
    Loop
End With
としています。この方法だとActiveDocument.shapes(i)がセレクトされた状態になります。
直接ActiveDocument.shapes(i).TextFrame.TextRangeでX文字目からZ文字数変更できる方法はないでしょうか
 
ご教示お願いします

回答
投稿日時: 18/03/28 10:49:17
投稿者: sk

引用:
ワード文書に配置したAutoShapeに書き込んだ文字列の
X番目の文字からY番目の文字の文字サイズを変更する方法

(標準モジュール)
------------------------------------------------------------
Private Sub subSetFontSizeInShape()
     
    Dim wrdDoc As Word.Document
    Dim wrdShape As Word.Shape
    Dim wrdTextFrame As Word.TextFrame
    Dim wrdRange As Word.Range
     
    Dim lngStart As Long
    Dim lngEnd As Long
     
    Set wrdDoc = ActiveDocument
     
    '図形が1つもなければ終了
    If wrdDoc.Shapes.Count = 0 Then
        Set wrdDoc = Nothing
        Exit Sub
    End If
         
    '1つめの図形を参照
    Set wrdShape = wrdDoc.Shapes(1)
     
    '図形のレイアウト枠の参照
    Set wrdTextFrame = wrdShape.TextFrame
     
    'テキストが追加されていなければ終了
    If wrdTextFrame.HasText = False Then
        Set wrdTextFrame = Nothing
        Set wrdShape = Nothing
        Set wrdDoc = Nothing
        Exit Sub
    End If
     
    'レイアウト枠内のテキスト範囲を参照
    Set wrdRange = wrdTextFrame.TextRange
         
    '先頭の1文字の書式を設定する場合
    lngStart = 0
    lngEnd = 1
     
    With wrdRange
        '範囲の開始位置と終了位置の設定
        .SetRange lngStart, lngEnd
        'フォントサイズの設定
        .Font.Size = 8
    End With
     
    Set wrdRange = Nothing
    Set wrdTextFrame = Nothing
    Set wrdShape = Nothing
    Set wrdDoc = Nothing
     
End Sub
------------------------------------------------------------
 
図形の参照やテキストの範囲指定に関わるステートメントについては
適宜修正して下さい。
 
また、SetRange メソッドを呼び出す際、引数 Start や End に渡す値が
「左から何文字目か」ではなく「 0 から始まるカーソル位置」である
という点にご注意下さい。

回答
投稿日時: 18/03/28 11:50:29
投稿者: んなっと

すべてのテキストボックス内の"Word"を検索してフォントサイズ変更
 
Sub test1()
  Dim i As Long
  With ActiveDocument.Shapes
    For i = 1 To .Count
      If .Item(i).Type = msoTextBox Then
        With .Item(i).TextFrame.TextRange.Find
          .Text = "Word"
          .Replacement.Font.Size = 10
          .Execute Replace:=wdReplaceAll
        End With
      End If
    Next i
  End With
End Sub
   
すべてのテキストボックス内の5文字目から4文字分のフォントサイズ変更
 
Sub test2()
  Dim i As Long
  With ActiveDocument.Shapes
    For i = 1 To .Count
      If .Item(i).Type = msoTextBox Then
        With .Item(i).TextFrame.TextRange.Characters(5)
          .MoveEnd wdCharacter, 3
          .Font.Size = 10
        End With
      End If
    Next i
  End With
End Sub
  

投稿日時: 18/03/28 13:09:11
投稿者: さむさむ

んなっとさん ありがとうございました。
希望の動きを作ることができました。