- ベストアンサー
エクセルのオートシェイプのテキストボックスにハイパーリンクの設定をする方法
テキストボックスに入力した文字をクリックするとその文字を含むセルにリンクするというマクロはできるのでしょうか?通常のハイパーリンクだと指定したセルに飛びますが、それだとちょっと困る事があるので「指定した文字を含む」という条件でマクロかなにかでできたら便利なんですが、なにかいい方法があれば教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> NM = ActiveSheet.Shapes.Range(Application.Caller).Name マクロを単独で実行されたようですね。 前回記述したマクロは、テキストボックスに登録して使います。 マクロを記述したら、テキストボックスの右クリックから "マクロの 登録"を選択して SearchByTxtbox を指定します。 その後、テキストボックスをクリックしますと、ボックス内に入力さ れている文字を含むセルを検索します。 続けてテキストボックスのクリックを繰り返すと、順次次のセルを検 索します。 テキストボックス内の文字列を書き換えてクリックすると、新しい文 字列の検索に入ります。 テキストボックス内の文字列は、30字までです。 とりあえず、テキストボックスは1つだけという前提で、複数のテキ ストボックスで交互に検索する場合は、このままでは使えません。
その他の回答 (4)
- izmlz
- ベストアンサー率55% (67/120)
エラーになるとのことですが、テキストボックスのはじを右クリック-[マクロの登録]で、テキストボックス自体にマクロを登録されているでしょうか?もしかして、テキストボックスに文字列は入力されているけれども、コマンドボタンにマクロが登録されていることはないでしょうか? もし、上記が該当しないのであれば、「オートシェイプのテキストボックス」とあるので、同じ「テキストボックス」だとは思うのですが、念のため。どのようにして作成した「テキストボックス」なのでしょうか?当方では、[図形描画]ツールバーの[テキストボックス]をクリックして作成しています。 それから、「テキストボックスにハイパーリンクの設定をする方法」とのことだったので、通常のハイパーリンクの運用と同様に、 (1)行き先は一箇所。 (2)異なる文字列が入力された複数のテキストボックスがある。 (3)ハイパーリンクがいちいちハイパーリンク先を変更することがないように、テキストボックスのテキストを変更することはない。 という前提で考えていました。 もし、一つのテキストボックスで対応、すなわちキーワードをしばしば変更するのであれば、テキストボックスを使用するのではなくて、「キーワード入力用のセル」+「コマンドボタン」の方が操作がだんぜん楽で良いんじゃないでしょうか?テキストボックスのクリックでマクロを実行するようになっていて、テキストボックスのテキストを変更するのは、右クリックして[テキストの変更]を選んでと面倒です。
お礼
質問がわかりづらくてすみません。テキストボックスの中にマクロは登録してます。テキストボックスも間違いなく同じものです。文章の一部にハイパーリンクの設定をしたかったので、、「キーワード入力用のセル」+「コマンドボタン」とはやりたことが違うかと思います。 せっかく教えていただいたのにうまくできず申し訳ありません。
- misatoanna
- ベストアンサー率58% (528/896)
> やってみましたが「指定したパラメーターに無効な値が含まれています」 こちらではエラーは発生しないのですが、 どの時点でエラーになりますか。 また、エラーメッセージが表示されるダイアログで[デバッグ]をクリックした場合、 モジュールのどの部分が反転していますか?
お礼
↓この部分でエラーが出ました。 NM = ActiveSheet.Shapes.Range(Application.Caller).Name ちなみにこれは文字をクリックして実行されるマクロですか? NMとsrchはすべて変えるのでしょうか?
- misatoanna
- ベストアンサー率58% (528/896)
ハイパーリンクにしてもマクロにしても、テキストボックス内の文字列を 変更するのに右クリックを使わなければならないので面倒ですね。 テキストボックスに、次のマクロを登録するのはいかがでしょうか。 Sub SearchByTxtbox() Dim NM, srch, rng NM = ActiveSheet.Shapes.Range(Application.Caller).Name srch = Replace(ActiveSheet.Shapes(NM).TextFrame.Characters.Text, Chr(10), "") If srch = "" Then Exit Sub Select Case NM Case Is <> srch Set rng = ActiveSheet.Cells.Find(What:=srch, SearchDirection:=xlNext) If rng Is Nothing Then MsgBox "該当するセルがありません!" Exit Sub End If Cells(rng.Row, rng.Column).Select ActiveSheet.Shapes(NM).Name = srch Case Else Cells.FindNext(After:=ActiveCell).Activate End Select End Sub NM:テキストボックスの名前、srch:テキストボックスに記述された検索文字列 マクロを登録したテキストボックスに記述された文字列をみて、 ・空白の場合 何もしないでマクロを終了します。 ・テキストボックス名と異なる場合 新たな検索文字列が指定された場合です。 文字列を検索してヒットしたら、テキストボックスの名前を、ボックス内に 記述された検索文字列と同じにします。 ・テキストボックス名と同じ場合 テキストボックスに記述されている検索文字列で「次」を検索します。
お礼
ご回答ありがとうございます。やってみましたが、「指定したパラメーターに無効な値が含まれています」とエラーが出てしまいました。 どうすればいいでしょうか?
- izmlz
- ベストアンサー率55% (67/120)
↓こんな感じでいかがでしょうか? Sub テキスト1_Click() Dim myStr As String Dim myRng As Range myStr = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text Set myRng = Cells.Find(myStr) If myRng Is Nothing Then MsgBox "「" & myStr & "」は入力されていません" Else myRng.Activate End If Set myRng = Nothing End Sub
お礼
ご回答ありがとうございます。 「型が一致しません」というエラーが出ましたが、そのままマクロをペーストするだけではできないのでしょうか?
お礼
うまくできました!完璧です。ご指導ありがとうございました。