[英]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.