- ベストアンサー
Excel ハイパーリンクのマクロについて
エクセルで日報を作っています。 1日づつシートが1か月分あります。(Mainシート、8/25~9/24のシート) すべてのシート(※1)にB53にBack、H53にMain、O53にNextとあります。 (※1)最初のシートはNextのみ 最後のシートはBackのみ。 8/25のNextは8/26のNextにリンクさせる。Backはその逆。 MainはMainシートへリンクする。Mainシートにはリンクはない。 1つずつリンクさせていくのは面倒なので何かいいマクロはありませんか。 どうかよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すみません。マクロ例にミスがありました。必須プロパティを忘れていました。 Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim nxS As Integer Dim bkS As Integer On Error Resume Next nxS = ActiveSheet.Index + 1 bkS = ActiveSheet.Index - 1 If Sh.Name = "main" Then Exit Sub ActiveSheet.Hyperlinks.Add _ Anchor:=Range("H53"), _ Address:="", _ SubAddress:= _ "main!H53", TextToDisplay:="Main" ActiveSheet.Hyperlinks.Add _ Anchor:=Range("O53"), _ Address:="", _ SubAddress:= _ Sheets(nxS).Name & "!O53", TextToDisplay:="Next" If Sh.Index = 2 Then Exit Sub ActiveSheet.Hyperlinks.Add _ Anchor:=Range("B53"), _ Address:="", _ SubAddress:= _ Sheets(bkS).Name & "!B53", TextToDisplay:="Back" If Err.Number = 9 Then Range("O53").Value = "" End Sub
その他の回答 (1)
- TTak
- ベストアンサー率52% (206/389)
main 以外のシート名は可変扱いで、シートのインデックス値を使って次のシート、前のシートを指定してはいかがでしょう。 このマクロ例はWorkbook_SheetActivate イベントで、シートがクリックされる度に、ハイパーリンクを設定し直します。シートの追加・削除・main以外のリネームにも有効です。 TisWorkbookコードモジュールに張り付けて使用してみてください。なお、最初は空のシートで試してください。 Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim nxS As Integer Dim bkS As Integer On Error GoTo EH nxS = ActiveSheet.Index + 1 bkS = ActiveSheet.Index - 1 If Sh.Name = "main" Then Exit Sub ActiveSheet.Hyperlinks.Add _ Anchor:=Range("H53"), _ SubAddress:= _ "main!H53", TextToDisplay:="Main" ActiveSheet.Hyperlinks.Add _ Anchor:=Range("O53"), _ SubAddress:= _ Sheets(nxS).Name & "!O53", TextToDisplay:="Next" If Sh.Index = 2 Then Exit Sub ActiveSheet.Hyperlinks.Add _ Anchor:=Range("B53"), _ SubAddress:= _ Sheets(bkS).Name & "!B53", TextToDisplay:="Back" Exit Sub EH: If Err.Number = 9 Then Range("O53").Value = "" End Sub
お礼
ありがとうございました。 大変、役に立ちました。 また機会があればよろしくお願いします。