Excel VBA 質問スレッド №2011 (解決済)
検索してヒットしたオートシェイプ(テキストボックス)にフォーカス
投稿者 : けろ 投稿日時 : 2024/09/11(Wed) 11:50:54 OS : Windows 10 EXCEL : Excel 2016
シート内にたくさん図形テキストボックスがあります。
以下の記述はインプットボックスにキーワードを入力してヒットしたテキストボックス図形を複数選択しています。
ヒットした一番最初の選択図形にフォーカス(画面を移動)したいのです。
目の前にある画面内でヒットしたものがあればわかりやすいですが、遠く遠くスクロールした先にある場合、少し不便ですのでできればヒットして選択された図形にフォーカスしたいです。
フォーカスできる記述があれば教えていただきたいです。
シート内にたくさん図形テキストボックスがあります。
以下の記述はインプットボックスにキーワードを入力してヒットしたテキストボックス図形を複数選択しています。
ヒットした一番最初の選択図形にフォーカス(画面を移動)したいのです。
目の前にある画面内でヒットしたものがあればわかりやすいですが、遠く遠くスクロールした先にある場合、少し不便ですのでできればヒットして選択された図形にフォーカスしたいです。
フォーカスできる記述があれば教えていただきたいです。
'TextBox検索ボタン Private Sub FindBT_Click() Dim kw As String kw = InputBox(Prompt:="検索する文字を入力してください。") If kw = "" Then Exit Sub 'キャンセルか入力無しなら終わり ' Dim sh As Shape Dim co As New Collection Dim i As Integer For Each sh In ActiveSheet.Shapes 'アクティブシートのシェープを順に調べる If sh.TextFrame2.HasText Then 'テキストフレームにテキストがあれば If InStr(sh.TextFrame2.TextRange.text, kw) > 0 Then '検索文字列が含まれているなら co.Add sh 'Collectionにシェープを追加 End If End If Next If co.Count = 0 Then 'Collectionの数が0なら MsgBox "検索結果が見つかりませんでした" Else 'Collectionの数が0でないなら For i = 1 To co.Count 'Collectionを順に co(i).Select i = 1 '最初のShape以外追加選択 Next End If End Sub
スポンサーリンク
[返信 1] Re : 検索してヒットしたオートシェイプ(テキストボックス)にフォーカス
投稿者 : さんこう 投稿日時 : 2024/09/11(Wed) 12:31:44
オートシェイプの左上のセル位置は、TopLeftCellプロパティでわかります。
特定のセル位置へスクロールするのは、Application.Goto メソッド が使えます。
オートシェイプの左上のセル位置は、TopLeftCellプロパティでわかります。
特定のセル位置へスクロールするのは、Application.Goto メソッド が使えます。
[返信 2] Re : 検索してヒットしたオートシェイプ(テキストボックス)にフォーカス
投稿者 : higeru 投稿日時 : 2024/09/12(Thu) 08:38:59
「フォーカス」の意味が曖昧ですが、「画面左上」に選択された図形(のひとつ)が表示されるようにする、ということだと解釈すれば、さんこうさんのヒントにあるように Application.Goto を使えばよいです。
選択図形が複数の際、どれを左上にするかの判定はあずかり知らぬところなので、とりあえず最初に見つかった図形とすれば、"End Sub" の2行前に
Application.Goto co(1).TopLeftCell, True
を追加します。
余談ですが、以下はパッと見で理解できませんでした。
co(i).Select i = 1 '最初のShape以外追加選択
普通に
co(i).Select Replace:=False もしくは co(i).Select False
でよいと思いますがねぇ。
「フォーカス」の意味が曖昧ですが、「画面左上」に選択された図形(のひとつ)が表示されるようにする、ということだと解釈すれば、さんこうさんのヒントにあるように Application.Goto を使えばよいです。
選択図形が複数の際、どれを左上にするかの判定はあずかり知らぬところなので、とりあえず最初に見つかった図形とすれば、"End Sub" の2行前に
Application.Goto co(1).TopLeftCell, True
を追加します。
余談ですが、以下はパッと見で理解できませんでした。
co(i).Select i = 1 '最初のShape以外追加選択
普通に
co(i).Select Replace:=False もしくは co(i).Select False
でよいと思いますがねぇ。
[返信 3] Re : 検索してヒットしたオートシェイプ(テキストボックス)にフォーカス
投稿者 : けろ 投稿日時 : 2024/09/12(Thu) 15:23:58
いろいろ記述してもうまくいかず悩んでおりましたが、 Application.Goto co(1).TopLeftCell, Trueにて解決しました。
あと、co(i).Select Replace:=False に変更いたしました。
ややこしい記述の中、助かりました。ありがとうございます。
いろいろ記述してもうまくいかず悩んでおりましたが、 Application.Goto co(1).TopLeftCell, Trueにて解決しました。
あと、co(i).Select Replace:=False に変更いたしました。
ややこしい記述の中、助かりました。ありがとうございます。
[返信 4] Re : 検索してヒットしたオートシェイプ(テキストボックス)にフォーカス
投稿者 : けろ 投稿日時 : 2024/09/12(Thu) 15:24:53
解決済です。
解決済です。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-07-05 08:55:25 )