Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Excel 2016)
ハイパーリンクを使って、VBAコードで非表示のシートを開くには?
投稿日時: 21/04/23 20:05:57
投稿者: くるくるα

名簿に住所があり、Hyperlink等を使って、
地図を画像で貼り付けたシートに移動するにはどうしたらいいかを
教えてください。
 
名簿に1、2,3,4,5と順番が振ってあり、
数が多いので、それぞれシートを非表示にして隠しておきたいです。
 
名簿の1を押すと非表示シートの1を表示し、
そのシート1から別のシートを表示するタイミングで、
そのシート1を非表示にする方法を教えてほしいです。
 
宜しくお願いします

回答
投稿日時: 21/04/23 21:44:51
投稿者: simple

ヒントを書きます。
 
(Hyperlink関数を使わない)通常のハイパーリンクを対象として、
そのハイパーリンクがクリックされたときに動作するイベントプロシージャがあります。
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
 
この中で、
Set sh = Application.Range(Target.SubAddress).Parent
とすると、ハイパーリンク先のワークシートが得られます。
 
あとは、
・ハイパーリンク先のシートを表示状態にし、
・ハイパーリンク先と名簿シート以外のシートを非表示にする
動作を、そのイベントプロシージャに書けばよいと思います。
(表示したり、非表示にするコードは、マクロ記録で得られます。)
 
少しトライしてみて下さい。

回答
投稿日時: 21/04/23 21:48:51
投稿者: simple

ワークブックレベルの同種のイベントプロシージャがありますが、
まずは、名簿シートに限定して、シートレベルのイベントプロシージャを考えてみたらどうでしょう。
そのあとで、ブックレベルに調整はできそうです。

回答
投稿日時: 21/04/25 00:18:48
投稿者: WinArrow
投稿者のウェブサイトに移動

↓私見
VBAを使うのだったら、ユーザーフォームでコマンドバーもどきを作成したほうが楽かも?
コマンドバーもどきには、コンボボックス(シート名)を置き、選択したら
前回のアクティブのシートを非表示にする。
選択したシートを表示して、アクティブにする。
アクティブしたシート名を記憶する。
 
記憶には、Combobox.Tagを使います。
 
 
 

回答
投稿日時: 21/04/26 22:56:46
投稿者: simple

トライされて追加質問がされるものと備えておりました。
反応を待ちましたがコメントがなく残念です。
 
無駄になりかねないので、参考コードとしてあげておきます。
# こうした丸々のコード提示は、余り気が進まないです。
 
なお、質問を読むと、ハイパーリンクの仕方も質問されているんでしょうか。
それは、手作業でやってください。
 
ThisWorkbookモジュールに下記をコピーペイストして下さい。
 

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
    Dim targetSH As Worksheet   'ジャンプ先のシート
    Dim ws       As Worksheet

    Application.ScreenUpdating = False

    'ハイパーリンク先のシート
    Set targetSH = Application.Range(Target.SubAddress).Parent
    
    'それを表示状態に
    targetSH.Visible = xlSheetVisible
    
    '各シートの表示状態を調整
    For Each ws In Worksheets
        If ws.Name <> "名簿" And ws.Name <> targetSH.Name Then
            ws.Visible = xlSheetHidden
        End If
    Next
    
    ' リンク先にジャンプ
    Application.Goto Application.Range(Target.SubAddress), True
    
    Application.ScreenUpdating = True
End Sub

トピックに返信