- ベストアンサー
エクセル ハイパーリンク先でのボタンの表示/非表示
こんばんは。 エクセルでのボタンの表示/非表示についての質問です。 シートA、B、C、があり、AのシートにもBのシートにもCのシートへジャンプするハイパーリンクが設定してあります。 シートCにAボタン、Bボタンがあり、ジャンプしてきたシートによってボタンを表示/非表示にしたいと考えています。 【Aシートからジャンプして来た場合】 Cシート:Aボタンは表示、Bボタンは非表示 【Bシートからジャンプして来た場合】 Cシート:Aボタンは非表示、Bボタンは表示 これができる方法を模索中です。 どうぞよろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
すみません、激しく勘違いしたようで。。 イベントの発生順序は、Activate --> FollowHyperlink です。したがって、 Activate イベントで一度両方のボタンを非表示にし、FollowHyperlink イベントでどのシートのリンクがクリックされたかで分岐させて、必要な ボタンを表示させればよいかと。 ' // ■ ThisWorkbook モジュール ' // シートがアクティブになったとき発生するイベント Private Sub Workbook_SheetActivate(ByVal Sh As Object) Worksheets("C").Shapes("ボタンA").Visible = False Worksheets("C").Shapes("ボタンB").Visible = False End Sub ' // ハイパーリンクがクリックされたとき発生するイベント Private Sub Workbook_SheetFollowHyperlink( _ ByVal Sh As Object, _ ByVal Target As Hyperlink _ ) Select Case Sh.Name Case "A": Worksheets("C").Shapes("ボタンA").Visible = True Case "B": Worksheets("C").Shapes("ボタンB").Visible = True End Select End Sub 余談ですが、、、 > それぞれに別のマクロが組まれています。 OnAction を使って割り当てるマクロを動的に切り替えることもできます。
その他の回答 (4)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> このやり方も教えて頂ければ幸いです。 ん? ヘルプで OnAction を調べてみればわかると思いますよ。 FollowHyperlink イベントを下記のようにするとか。 ' // ハイパーリンクがクリックされたとき発生するイベント Private Sub Workbook_SheetFollowHyperlink( _ ByVal Sh As Object, _ ByVal Target As Hyperlink _ ) Select Case Sh.Name Case "A": Worksheets("C").Shapes("ボタンA").OnAction = "マクロA" Case "B": Worksheets("C").Shapes("ボタンA").OnAction = "マクロB" End Select End Sub
- KenKen_SP
- ベストアンサー率62% (785/1258)
> 「Web」ツールバーには、インターネットエクスプローラなどでよく > 使う「戻る」「進む」ボタンがある なるほど。。これならマクロなしでもできますね! 参考ですが、これをマクロから利用するコードです。 ' // コマンド[戻る]を実行 Sub GoBack() On Error Resume Next Application.CommandBars.FindControl(Id:=1017).Execute End Sub ' // コマンド[進む]を実行 Sub GoForward() On Error Resume Next Application.CommandBars.FindControl(Id:=1018).Execute End Sub
補足
早速のご解答ありがとうございます。 CシートのAボタン、Bボタンはジャンプ元に戻るためのボタンではなく、それぞれに別のマクロが組まれています。 ですので、Aシートからジャンプして来た場合はCシートのAボタンだけを表示、Bシートからジャンプして来た場合はCシートのBボタンだけを表示させるようにしたいのです。 もし可能であれば、ハイパーリンクをクリックした時以外は両ボタンとも非表示にする方法も知りたいです。 ご面倒をおかけ致しますが、よろしくお願い致します。
- onlyrom
- ベストアンサー率59% (228/384)
A,Bボタンが飛んできたシートに戻るためだけの役目なら、 A、Bボタン両方なくてもエクセルの機能だけでできますが。 「表示」>「ツールバー」>「Web」をクリック 「Web」ツールバーが表示されるので、 「標準」ツールバー等のある画面上部にドラッグしておく 「Web」ツールバーには、インターネットエクスプローラなどでよく使う「戻る」「進む」ボタンがある シート1からシート3へハイパーリンクで飛んだ後、 シート1へ戻りたければ、 「Web」ツールバーの「戻る」ボタンで戻れます。 シート2からシート3へ飛んだ場合も同様。 これに限らず、どのシートでもハイパーリンクで飛んだら 「戻る」ボタンで元のシートへ戻れるということです。 A,Bボタンが「戻る」ためのものではなく他のことをするためのものでしたら、ご容赦願います。
補足
早速のご解答ありがとうございます。 CシートのAボタン、Bボタンはジャンプ元に戻るためのボタンではなく、それぞれに別のマクロが組まれています。 ですので、Aシートからジャンプして来た場合はCシートのAボタンだけを表示、Bシートからジャンプして来た場合はCシートのBボタンだけを表示させるようにしたいのです。 もし可能であれば、ハイパーリンクをクリックした時以外は両ボタンとも非表示にする方法も知りたいです。 ご面倒をおかけ致しますが、よろしくお願い致します。
- KenKen_SP
- ベストアンサー率62% (785/1258)
ボタンの表示を切り替え...もちろん可能ですが、シンプルにボタンは 1つにしてみては? 1. 以下のコードをそれぞれのモジュールにコピペします。 ' // ■ ThisWorkbook モジュール ' // ハイパーリンク元のシートを参照しておくオブジェクト変数 Public gPrevSheet As Worksheet ' // ハイパーリンクがクリックされたとき発生するイベント Private Sub Workbook_SheetFollowHyperlink( _ ByVal Sh As Object, _ ByVal Target As Hyperlink _ ) Set gPrevSheet = Sh End Sub ' // ■ 標準モジュール Sub GoBackSheet() On Error Resume Next ThisWorkbook.gPrevSheet.Activate Set ThisWorkbook.gPrevSheet = Nothing End Sub 2. C シートにボタンを配置し、キャプションを「戻る」にする 3. 2. のボタンにマクロ「GoBackSheet」を割り当てる
補足
早速のご解答ありがとうございます。 説明が足りなかったようですので補足致します。 CシートのAボタン、Bボタンはジャンプ元に戻るためのボタンではなく、それぞれに別のマクロが組まれています。 ですので、Aシートからジャンプして来た場合はCシートのAボタンだけを表示、Bシートからジャンプして来た場合はCシートのBボタンだけを表示させるようにしたいのです。 もし可能であれば、ハイパーリンクをクリックした時以外は両ボタンとも非表示にする方法も知りたいです。 ご面倒をおかけ致しますが、よろしくお願い致します。
お礼
ありがとうございます!!できました!!! 感謝感激雨あられです!(笑) まさかこんなやり方があるとは。目からうろこです。 非常に図々しいお願いなんですが、 >OnAction を使って割り当てるマクロを動的に >切り替えることもできます。 このやり方も教えて頂ければ幸いです。 ちなみにAボタンは並び替え、Bボタンは集計のマクロが組まれています。 誠に勝手なお願いですが、どうぞよろしくお願い致します。