2014-01-30 21 views
3

我與在表格數據的單元格區域:FollowHyperlink事件 - 如何停止打開鏈接?

「AAA; BBB; CCC」

其中理想地我要創建用於每個AAA,BBB和CCC的一個單獨的超鏈接。由於Excel只允許每個單元使用一個超鏈接,因此當我單擊虛擬超鏈接時,我想我可以拆分單元格文本並使用'ShellExecute'打開三個網頁。

我在小區創建超鏈接「www.google.com」,並寫在「FollowHyperlink」事件代碼如下:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
    Dim strArray() As String 
    Dim strSamp As String 

    strArray() = Split(ActiveCell.Text, ";") 

    For i = LBound(strArray) To UBound(strArray) 
     strSamp = "www." + strArray(i) + ".com" 
     lSuccess = ShellExecute(0, "Open", strSamp) 
     MsgBox (strSamp) 
    Next i 
End Sub 

我每次單擊該單元格,在瀏覽器中打開Google和消息框不顯示。

我無法弄清楚我的邏輯錯誤。我希望你們有任何見解可以給我。

編輯:

我重寫了代碼在一個新的工作表,代碼工作正常,因爲它應該。消息框現在正在顯示,單個超鏈接在瀏覽器中打開。但除了個別鏈接之外,虛擬鏈接(在這個例子中是谷歌)也在開放。我如何阻止它打開?

+0

試試這個:將單元格鏈接到自身而不是鏈接到網站。 –

+0

工作正常!謝謝 !如果你可以寫這個答案,那麼我可以將其標記爲接受的答案。 – Nyx

+0

如果你堅持:)...完成 –

回答

1

我使用Worksheet_BeforeDoubleClick事件進行這些操作。

假設文本在單元格A1中。嘗試這個。

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ 
(ByVal hwnd As Long, ByVal lpszOp As String, _ 
ByVal lpszFile As String, ByVal lpszParams As String, _ 
ByVal LpszDir As String, ByVal FsShowCmd As Long) As Long 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
    Dim strArray() As String, strSamp As String 
    Dim i As Long 

    If Not Intersect(Target, Range("A1")) Is Nothing Then 
     strArray = Split(Target.Value, ";") 

     For i = LBound(strArray) To UBound(strArray) 
      strSamp = "www." + strArray(i) + ".com" 
      ShellExecute 0, "Open", strSamp, "", "", SW_SHOWNORMAL 
      DoEvents 
     Next i 
     Cancel = True 
    End If 
End Sub 

編輯:

哎呀,我忘了提,你需要雙擊單元格A1此代碼運行:對

注意:如果你想仍使用Worksheet_FollowHyperlink()方法,然後將該單元超鏈接到自身而不是網站。這不會啓動網站並顯示您的消息框。

+0

這段代碼就像一個魅力!但我有必要讓單元格包含超鏈接。 – Nyx