前提・実現したいこと
エクセルのブック内でどこかしらのハイパーリンク(ブック内)がクリックされたときに,標準モジュールに書いたコードを実行したいです.
クリックしたときにファイル内を更新するイメージで使おうと考えています.
ブック内の各シートには複数のリンクがあります.
発生している問題・エラーメッセージ
エラーメッセージは何も表示されず,リンク先へジャンプするだけになってしまいます.
該当のソースコード
vba
1Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) 2 Call プログラム 3End Sub
この下に呼び出すプログラムを示します.
ワークシート数と特定のシートのテーブルデータ行数を比較して差がある場合にテーブル更新するという内容です.
vba
1Worksheets("???").Activate 2 Dim N As Long 3 With Range("A1").ListObject 4 N = .ListColumns(1).DataBodyRange.Count 5 If Worksheets.Count - 1 > N Then 6 Dim j As Long 7 For j = 1 To Worksheets.Count - 1 - N 8 .ListColumns(1).DataBodyRange(N + j).Value = N + j 9 Next 10 Else 11 End If 12 End With 13End Sub
試したこと
・オブジェクトはThisworkbook,プロシージャはSheetFollowHyperlinkに記入しています.
・イミディエイトウィンドウでプログラムを起動することは確認しています.
・コードの内容を以下の記述の下に書き込んでも動きませんでした.
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
補足情報(FW/ツールのバージョンなど)
windows10
Excel365
呼び出すプロシージャ名や、コードを提示されたほうがよろしいかと。
コードの内容をイベントプロシージャ内に書いても動作しない、ということは呼び出すコード自体に問題があると考えられるので。
思いつくところでいうと
①Application.EnableEvents が何かのきっかけで Falseになっている
②Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)を標準モジュールに記述している(ThisWorkbookモジュールに書く必要がある)
jinojiさんのご指摘の通りのような気がしますが、きちんと呼び出しているか確認するのであれば、
「Call プログラム」の部分にブレークポイントを設定してハイパーリンクをクリックしてみてはいかがでしょうか?
イベントが拾えていれば、そこで一旦コードが止まるので。
アドバイスありがとうございます.確認したことと結果を下に書きます.
Debug.Print Application.EnableEventsはtrueでした.
②についても見直しましたが,オブジェクトはThisworkbookでした.(Private Sub~のコードウインドウにカーソルを合わせた状態で,プロジェクトエクスプローラーのThisworkbookがグレーにハイライトしている)
call の行をブレークポイントに設定しましたが,黄色のハイライトはどの行にもかかりませんでした.
「call の行をブレークポイントに設定しましたが,黄色のハイライトはどの行にもかかりませんでした.」
とのことですが、だとすると普通に考えるとイベントが動いていないことになります。
他のイベントが動作するか確認できますか?
他のイベントも動かないのであれば、やはり「EnableEvents」がFalseになっていると思われます。
もしくは、 そもそもマクロが有効になっていないとかですかね。
イミディエイトウインドウに
Debug.Print Application.EnableEvents
と入力してTrueとなることを確認したのですが,この方法で確認することはあっていますでしょうか?
今一度,Thisworkbookに書かれているか,callで起動するかについても併せて確認しようと思います.
確認方法自体はあっていますね。他のイベントを作ってみてそれが動くかは確認できますか?
または、新規にブックを作ってそちらにコードをコピーして確認してみることはできますか?
あなたの回答
tips
プレビュー