【パワポ検索ツールを作る4】If Not


検索アルゴリズムの仕様

 前回は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

 プレゼンテーション内にテキストボックスに適当な文字を入力してユーザーフォームを実行してみましょう。注意点として現段階で矢印など検索できないシェイプがある場合はエラーになります。次回は矢印など文字が入力できないシェイプがある場合の対処法を解説します。


コメントを残す