Excel VBA:子例程或函数来处理超链接点击

关于这方面的信息有相当多的信息,但是我一直无法为自己工作。

我需要做的是有一个全局的子例程,捕捉整个文档的超链接点击,而不仅仅是活动工作表。 为什么? 因为我的工作簿在几张纸上有几个链接,除了他们的位置(和相邻的单元格的内容等)外,它们都是“一致的”。

这很容易做到与button – 只是将他们连接到同一个macros – 但我有问题做相同的链接。

这适用于一个特定的表格:

在Microsoft Excel对象中 – >有问题的工作表:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) MsgBox "Link i Arket! " & Target.Range.Address End Sub 

当我单击有问题的表单上的链接时,表单的VBA子例程会捕获点击并处理它。

下面的代码,我认为,“应该”为整个文件工作。 也就是说,捕获超链接从工作簿中的任何工作表中点击。 它不(就是没有发生):

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

在Excel中hover时显示的链接:

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

我在这里错过了什么?

您可以通过创build带有WithEvents工作表对象的类并将这些类存储在公共集合中来为所有工作表重用相同的代码。

模块1

 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 

创build一个名为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