プロが教えるわが家の防犯対策術!

こんばんは。

エクセルでのボタンの表示/非表示についての質問です。

シートA、B、C、があり、AのシートにもBのシートにもCのシートへジャンプするハイパーリンクが設定してあります。
シートCにAボタン、Bボタンがあり、ジャンプしてきたシートによってボタンを表示/非表示にしたいと考えています。

【Aシートからジャンプして来た場合】
Cシート:Aボタンは表示、Bボタンは非表示

【Bシートからジャンプして来た場合】
Cシート:Aボタンは非表示、Bボタンは表示

これができる方法を模索中です。
どうぞよろしくお願い致します。

A 回答 (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 を使って割り当てるマクロを動的に切り替えることもできます。
    • good
    • 0
この回答へのお礼

ありがとうございます!!できました!!!
感謝感激雨あられです!(笑)
まさかこんなやり方があるとは。目からうろこです。

非常に図々しいお願いなんですが、

>OnAction を使って割り当てるマクロを動的に
>切り替えることもできます。

このやり方も教えて頂ければ幸いです。
ちなみにAボタンは並び替え、Bボタンは集計のマクロが組まれています。
誠に勝手なお願いですが、どうぞよろしくお願い致します。

お礼日時:2007/10/04 23:32

> このやり方も教えて頂ければ幸いです。



ん? ヘルプで 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
    • good
    • 0

> 「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ボタンだけを表示させるようにしたいのです。

もし可能であれば、ハイパーリンクをクリックした時以外は両ボタンとも非表示にする方法も知りたいです。

ご面倒をおかけ致しますが、よろしくお願い致します。

補足日時:2007/10/04 19:20
    • good
    • 0

A,Bボタンが飛んできたシートに戻るためだけの役目なら、


A、Bボタン両方なくてもエクセルの機能だけでできますが。

「表示」>「ツールバー」>「Web」をクリック

「Web」ツールバーが表示されるので、
「標準」ツールバー等のある画面上部にドラッグしておく

「Web」ツールバーには、インターネットエクスプローラなどでよく使う「戻る」「進む」ボタンがある

シート1からシート3へハイパーリンクで飛んだ後、
シート1へ戻りたければ、
「Web」ツールバーの「戻る」ボタンで戻れます。

シート2からシート3へ飛んだ場合も同様。

これに限らず、どのシートでもハイパーリンクで飛んだら
「戻る」ボタンで元のシートへ戻れるということです。

A,Bボタンが「戻る」ためのものではなく他のことをするためのものでしたら、ご容赦願います。
 

この回答への補足

早速のご解答ありがとうございます。

CシートのAボタン、Bボタンはジャンプ元に戻るためのボタンではなく、それぞれに別のマクロが組まれています。
ですので、Aシートからジャンプして来た場合はCシートのAボタンだけを表示、Bシートからジャンプして来た場合はCシートのBボタンだけを表示させるようにしたいのです。

もし可能であれば、ハイパーリンクをクリックした時以外は両ボタンとも非表示にする方法も知りたいです。

ご面倒をおかけ致しますが、よろしくお願い致します。

補足日時:2007/10/04 19:19
    • good
    • 0

ボタンの表示を切り替え...もちろん可能ですが、シンプルにボタンは


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ボタンだけを表示させるようにしたいのです。

もし可能であれば、ハイパーリンクをクリックした時以外は両ボタンとも非表示にする方法も知りたいです。

ご面倒をおかけ致しますが、よろしくお願い致します。

補足日時:2007/10/04 19:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!