2017-09-18 4 views
0

これについての情報がかなり見つかりましたが、自分で機能するようにはできませんでした。Excel VBA:ハイパーリンクのクリックを処理するサブルーチンまたは関数

私がする必要があるのは、アクティブなシートだけでなく、ドキュメント全体のハイパーリンクのクリックを捕捉するグローバルサブルーチンを持つことです。どうして?私のワークブックはいくつかのシートにいくつかのリンクを持っているので、それらの位置(および隣接するセルの内容など)を除き、すべて「同一」です。

これはボタンで簡単にできます。すべてを同じマクロに接続するだけですが、リンクで同じことをするときに問題があります。

これは、1枚の特定のシートのために、動作します:Microsoft Excelのオブジェクトで

- >問題のワークシート:

私が問題になっているシート上のリンクをクリックして、VBAサブ・ルーチンシートがクリックを捕らえてそれを処理するからです。

以下のコードは、ドキュメント全体で「すべき」と思っていました。つまり、ワークブック内の任意のシートからハイパーリンクのクリックをキャッチします。それは(つまり、何も起こりません)していません。

Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) 
    MsgBox "All sheets!" 
End Sub 

Excelでリンクを、ショーをホバリングするとき:

file://path/to/workbook.xlsm - click once to follow blablabla 

は、私がここで何をしないのですか?

答えて

1

WithEventsワークシート・オブジェクトを含むクラスを作成し、そのクラスをパブリック・コレクションに格納することにより、すべてのワークシートに同じコードを再利用できます。

Module1の

Public objCollection As Collection 

'Call on Workbook_Open 
Sub CreateClasses() 
Dim ws As Worksheet 
Dim HyperlinksClass As cHyperlinks 

    'Create A New Instance Of The Collection 
    Set objCollection = New Collection 
    'Loop All Worksheets 
    For Each ws In Worksheets 
     'Create A New Class For This Worksheet 
     Set HyperlinksClass = New cHyperlinks 
     'Add The Worksheet To The Class 
     Set HyperlinksClass.obj = ws 
     'Add The Class To The Collection 
     objCollection.Add HyperlinksClass 
    Next ws 

End Sub 

無知のために申し訳ありませんcHyperlinks

Private WithEvents pWS As Worksheet 

Private Sub pWS_FollowHyperlink(ByVal Target As Hyperlink) 

    'Code to handle hyperlinks here 

End Sub 

Property Set obj(ByVal objWS As Worksheet) 

    Set pWS = objWS 

End Property 
+0

と呼ばれるクラスを作成しますが、私はまだVBAで任意のクラスを作成していません。コードの最初の部分、Module1、私はモジュール1に挿入することができます、私はそれを取る。次に、新しいクラスモジュールを作成し、2番目のコードを挿入しますか?私は "cHyperlinks"(例として)という名前の新しいクラスモジュールを作成しましたが、それにコードの第2ビットを挿入することは何もしていないようです。 (もちろん、ハイパーリンクを処理するコードをいくつか追加しました)。 –

+0

こんにちは、はい、そうです。しかし、ブックのCreateClassesを呼び出すことを忘れないでください –

+0

Wonderful!できます :-) –

関連する問題