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

时间:2017-09-18 11:36:10

标签: excel vba

有很多关于此事的信息,但我还没有能够让它为自己工作。

我需要做的是拥有一个全局子例程来捕获整个文档的超链接点击,而不仅仅是活动工作表。为什么?因为我的工作簿将在几张表中有几个链接,这些链接都是相同的"除了它们的位置(以及相邻细胞的内容等)。

使用按钮很容易 - 只需将它们全部连接到同一个宏 - 但我在使用链接时也遇到了问题。

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

在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中的链接显示:

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

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

通过使用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

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