[VBA] 自動超連結 - FollowHyperlink



贊助商連結


leonchou
2001-09-23, 10:02 PM
超連結一定要「插入超連結」嗎? 答案是:No.
如果你的 Excel 活頁簿裡含有網址、文件、檔案的路徑,為了方便連結,
你可能會使用「插入超連結」的功能。可是又不喜歡那藍字底線的格式出現在
活頁薄裡(雖然可以改...),而且按過以後還會變色...
 
以下就來說明如何使用事件巨集(註1),讓你只要 "選取" 含有超連結的儲存格,
就會自動以對應的程式開啟網頁或文件(假設網址或路徑是在E欄) --
 
一.在工作表名稱按右鍵 >> 選擇 [檢視程式碼]
 
 http://home.pchome.com.tw/world/leonblue/forum/vba_sheets_event.jpg
 
二.在出現的 Visual Basic 編輯器視窗輸入以下內容:
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
1 Set a = Target.Cells(1): If a = "" Or a.Column <> 5 Then Exit Sub
2 ActiveWorkbook.FollowHyperlink a, , False
End Sub
 
〔程式說明〕
設定變數 a = 選取範圍的第一格(以免不小心選取到多格);
若 a 為空白或 a 不在第 5 欄(即E欄)則結束巨集不執行以下動作。
以對應的程式(如 IE)開啟 a 所代表的網頁或文件,False 是指若 a 是
網址且 IE 已開啟,則使用原 IE 視窗;改為 True 則會開啟新視窗。

你也可以開啟電腦裡的文件(如 HTM、DOC..)檔,並跳至文件裡的某書籤位置。
假設這些文件放在一個固定的資料夾裡,則儲存格裡的文件路徑可省略,只要檔名即可。
以 HTM (HTML) 檔為例,若要指定書籤位置,則在檔名後加上逗號及書籤名稱(註2)。
巨集如下 --
 
Const path1 = "D:\HTML\Articles\"
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
1 Set a = Target.Cells(1): If a = "" Or a.Column <> 5 Then Exit Sub
2 n = InStr(1, a, ","): b = ""
3 If n > 0 Then b = Right(a, Len(a) - n): a = Left(a, n - 1)
4 ActiveWorkbook.FollowHyperlink path1 & a & ".htm", b, True
End Sub
 
〔程式說明〕
Const 是宣告(設定)常數,這裡設定常數 path1 為一固定的資料夾路徑。
設定變數 a = 選取範圍的第一格(以免不小心選取到多格);
若 a 為空白或 a 不在第 5 欄(即E欄)則結束巨集不執行以下動作。
用函數 Instr 偵測 a 是否含有逗號,並將結果設為一變數 n ;
設定變數 b 為空字串,代表書籤位置的起始值。
若 n > 0 表示 a 裡含有逗號( n 為逗號所在的位置),則將變數 b 設為
逗號之後的字串,代表書籤位置,將變數 a 設為逗號之前的字串。
以對應的程式(IE)開啟 path1 路徑(資料夾)下的 a(HTM 檔),
並跳至 b 所代表的書籤位置(若有的話);True: 以新視窗開啟。

 
註1:事件巨集可以控制一個物件(如活頁簿、工作表), 當發生選取、
   修改、開啟... 等等事件時, 所要做的事情/動作.
   上述巨集就是利用事件巨集: 當工作表上的任一格被選取時,
   引發了工作表的 SelectionChange 事件, 而自動執行這個
   巨集 -- 也就是說, 不須手動執行. 事件巨集必須位於物件模組之中.
 
註2:例如「abc,xyz」表示 abc.htm 裡名為 xyz 的書籤位置。當然該 HTM 檔裡
   必須要有 <a name="xyz">...</a> 的 HTML Tag。

贊助商連結


Joe999
2001-09-24, 01:22 AM
^^ 謝謝您~
又學了一手~!