簡體   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