Office関連

テキストボックス等Shapeオブジェクトのテキストのみを置換するWordマクロ

Word MVPの新田さんのブログで気になる記事がありました。

テキストボックス内の文字を置換するマクロ

テキストボックス等Shapeオブジェクトのテキストのみを置換するWordマクロです。
これまで本文のみ、もしくはオートシェイプを含めた文書全体の文字列置換というのは行ったことがあるのですが、Shapeオブジェクトのみを対象とした文字列置換は行ったことがなかったので、私の方でも試してみました。

Option Explicit

Public Sub Sample()
  Dim Shp As Shape
  Dim GrpShp As Shape
  Dim CvsShp As Shape
  Dim CvsGrpShp As Shape
  
  Const SrcText As String = "あいうえお" '検索する文字列
  Const DestText As String = "かきくけこ" '置換後の文字列
  
  For Each Shp In ActiveDocument.Shapes
    If Shp.Type = msoCanvas Then
    '描画キャンバスの場合の処理
      For Each CvsShp In Shp.CanvasItems
        If CvsShp.Type = msoGroup Then
          For Each CvsGrpShp In CvsShp.GroupItems
            ReplaceShapeText CvsGrpShp, SrcText, DestText
          Next
        Else
          ReplaceShapeText CvsShp, SrcText, DestText
        End If
      Next
    ElseIf Shp.Type = msoGroup Then
    'グループ化されている場合の処理
      For Each GrpShp In Shp.GroupItems
        ReplaceShapeText GrpShp, SrcText, DestText
      Next
    Else
      ReplaceShapeText Shp, SrcText, DestText
    End If
  Next
End Sub

Private Sub ReplaceShapeText(ByVal Shp As Shape, ByVal SrcText As String, ByVal DestText As String)
  If Shp.TextFrame.HasText Then
    '検索条件は適当に設定
    With Shp.TextFrame.TextRange.Find
      .ClearFormatting
      .Forward = True
      .Text = SrcText
      .Replacement.Text = DestText
      .Execute Replace:=wdReplaceAll
    End With
  End If
End Sub

新田さんのマクロではSelectionオブジェクトを利用していますが、上記コードでは、ShapeオブジェクトのTextFrameプロパティ(TextFrameオブジェクト)にあるTextRangeプロパティからRangeオブジェクトを取得できるので、これを利用してみました。

描画キャンバスとグループ化されたアイテムだけは考慮していますが、それ以外は特別な処理をしていませんので、上記コードでは対応できない場合があるかもしれません。

Shapeオブジェクトのみ、ということで中々出番が無いかもしれませんが、こういったマクロも面白いですね(^^)

続・Office Ribbon Editorがダウンロード出来ない?前のページ

Windows 8 Developer PreviewをOS X Lionっぽくする。次のページ

関連記事

  1. Office関連

    「文書のスタイル」を設定するWordマクロ

    Wordのオプション画面 → 文章校正 → Word のスペル チェッ…

  2. アイコン一覧

    Office 365アイコン(imageMso)一覧(O)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  3. Office関連

    セルの行数をカウントするWordマクロ

    「ソースコードを番号行付きのテーブルに変換するWordマクロ」を実行し…

  4. アイコン一覧

    Office 365アイコン(imageMso)一覧を作成するにあたって

    Office 2013のアイコン一覧を公開してから4年ほど経ち、その間…

  5. Office関連

    Office 365 APIをVBAから呼び出す(2)

    前回の記事ではOffice 365とAzure ADの紐づけを行いまし…

  6. Office関連

    漢字かな交じり文をひらがなにするマクロ

    Yahoo!のテキスト解析Web API(ルビ振り)を使用して、漢字か…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP