検索アルゴリズムの仕様
前回はFind関数を使ってワード検索機能を実装しました(前回の記事はこちら)。今回はワード検索後の処理を作ります。内容は以下の通りです。
1:ワードが見つかった場合、まずそのスライドを開いてワードが記載されているシェイプを選択
2:見たかったワードで間違いないかYESかNOを選択、YESの場合は検索ループから抜ける。NOの場合は検索を続ける。
3:検索ワードが無かった時はコメントを表示。
そして今回のカギとなるのは手順2でNOを選択した時の否定条件分If Notを使います(条件文の解説はこちら、否定の解説はこちら)。条件が否定された時TRUEとなります。
前回の記事に検索後の処理を追加します。
コード
'VBA標準モジュール
Option Explicit
Sub findTest(txt As String)
Dim prs As Presentation 'プレゼンテーション
Dim sld As Slide 'スライド
Dim shp As Shape 'シェイプ
Dim txtRng As TextRange 'テキストレンジ
Dim foundtext As TextRange '文字発見用テキストレンジ
Dim flgFind As Boolean '文字発見フラグ
Dim sldNum As Integer '文字発見字のスライドNo
Dim msg As String 'メッセージ内容
Dim btm As Integer 'ボタン種類
Dim ttl As String 'タイトル
Dim response As Integer 'ボタン押した後の反応
msg = "見つけたよ!!"
btm = 4
ttl = "メッセージ"
flgFind = False
For Each prs In Presentations '全プレゼンテーションをループ
For Each sld In prs.Slides '全スライドをループ
For Each shp In sld.Shapes '全図形をループ
Set txtRng = shp.TextFrame.TextRange
Set foundtext = txtRng.Find(txt, msoFalse, msoFalse)
'文字を発見した時
If Not (foundtext Is Nothing) Then
flgFind = True '文字発見
With foundtext
sldNum = sld.SlideIndex '検索ワードが記載されたスライドNo代入
prs.Windows(1).Activate '検索ワードがあるプレゼンテーションをアクティブ化
ActiveWindow.View.GotoSlide Index:=sldNum '検索ワードがあるスライドを開く
response = MsgBox(msg, btm, ttl) 'メッセージの返答に対する返り値
'ボタンを押した後の反応
If response = vbYes Then 'YESの場合
shp.Select '検索ワードを含むシェイプを選択
Exit Sub 'FindTestから抜ける
End If
End With
End If
Next
Next
Next
If flgFind = False Then
MsgBox ("ごめんなさい、見つけられませんでした・・・")
Else
MsgBox ("検索終了")
End If
End Sub
プレゼンテーション内にテキストボックスに適当な文字を入力してユーザーフォームを実行してみましょう。注意点として現段階で矢印など検索できないシェイプがある場合はエラーになります。次回は矢印など文字が入力できないシェイプがある場合の対処法を解説します。