やりたいこと
PowerPointで、全文でなく選択範囲内からテキスト検索したい。
マクロの作り方
ユーザーフォームに下記のようなコードを埋め込む。
「検索」ボタンと「次へ」ボタンは、それぞれ「btnSearch」、「btnNext」を割り当てる。
UserForm1.frm
Option Explicit
Private MyRng As TextRange
Private Found As TextRange
'「検索」ボタンを押したとき
Private Sub btnSearch_Click()
On Error GoTo ErrMessage
Set MyRng = ActiveWindow.Selection.TextRange
Set Found = MyRng.Find(TextBox1.text) 'テキストボックスに記入したテキストを検索する
Found.Select
Exit Sub
ErrMessage:
MsgBox "検索を行う範囲を選択してください"
End Sub
'「次へ」ボタンを押したとき
Private Sub btnNext_Click()
On Error GoTo ErrMessage
With Found
Set Found = MyRng.Find(TextBox1.text, .Start + .length - 1) '次のテキストを検索
If Not (Found Is Nothing) Then
Found.Select
Else
MsgBox "見つかりません"
End If
End With
Exit Sub
ErrMessage:
MsgBox "検索を行う範囲を選択してください"
End Sub
標準モジュールから呼び出せるようにする。
Module1.bas
Option Explicit
Public Sub Sample()
UserForm1.Show vbModeless
End Sub
これで、選択範囲からの検索ができるようになる。
課題
テキストを選択しているときは正常に動作するが、オートシェイプを選択しているときはうまく動作しないようです。様々な選択範囲に対してこのマクロを動作させるには、エラー処理を作りこむ必要がありそうです。
参考
- [TextRange.Find メソッド (PowerPoint)] (https://msdn.microsoft.com/ja-jp/library/office/ff744247.aspx)