繁体   English   中英

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

[英]Excel VBA: Sub routine or function to handle hyperlink clicks

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

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

使用按钮很容易做到这一点-只需将所有按钮都连接到同一个宏-但是我在使用链接进行相同操作时遇到了问题。

这适用于一个特定的工作表:

在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

我在这里想念什么?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM