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 アドイン

    Office 2016で進化したOffice アドイン

    今日OfficeDevを眺めていて気が付いたのが「OfficeJS S…

  2. Office関連

    SendKeysでWindowsキーを送信するVBAマクロ

    「VBA SendKeys Windowsキー」といったキーワード検索…

  3. Office関連

    プログラムのソースコードを別の言語に変換するVBAマクロ

    SharpDevelopが公開している、ソースコードを変換するAPI「…

  4. Office関連

    「Excel VBAでIEを思いのままに操作できるプログラミング術」の見本誌をいただきました。

    「VBAアクションゲーム?Excel(エクセル)で動かそう!」で有名な…

  5. Office関連

    Office文書をパスワード付きPDFに変換するVBAマクロ

    4年ほど前に書いた、下記記事のマクロがWordでも使えるか?との質問を…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP