2016-11-29 66 views
0

我正在創建一個動態超鏈接,它將過濾另一個工作表(工作表15)上的一個表。基於ActiveCell值(VBA)過濾表的動態超鏈接

我的目標是讓用戶能夠在Sheet3上選擇一個單元格,並將該單元格的VALUE作爲另一個表格上的過濾器。

這是到目前爲止我的代碼:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
    If Target.Type = msoHyperlinkRange And Target.Range.Address = "$S$15" Then 
     Application.ScreenUpdating = False 
     Sheet15.Visible = True 
     Sheet15.ListObjects("Table17").Range.AutoFilter Field:=19, Criteria1:=ActiveCell.Value 
     Sheet15.Activate 
     Application.ScreenUpdating = True 
    End If 
End Sub 

然而,當我點擊超鏈接,該表是不是在所有的過濾,所以我必須做一些錯誤的。

任何人都可以協助嗎?


UPDATE

下面是更新的代碼。

細胞S17現在,我想表篩選的值:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
    If Target.Type = msoHyperlinkRange And Target.Range.Address = "$S$15" Then 
     Application.ScreenUpdating = False 
     Sheet15.Visible = True 
     Sheet15.ListObjects("Table17").Range.AutoFilter Field:=19, Criteria1:=Sheet3.Range("S17").Value 
     Sheet15.Activate 
     Application.ScreenUpdating = True 
    End If 
End Sub 

但問題依然存在。當我點擊他們的超鏈接時,我會被帶到另一張表格,但表格根本不被過濾。

+0

適合我在快速測試。點擊鏈接時是否發生任何事情? –

+0

當我點擊鏈接時,它會將我帶到正確的工作表,但是表格根本沒有被過濾。 – Darren

+0

嘗試在您的代碼中添加Msgbox Sheet3.Range(「S17」)。Value「值是您期​​望的值嗎? –

回答

1

堅持原有計劃,並假設列「A」是一個以城市的名字,將在工作表中的代碼窗格

Option Explicit 

Dim lastCell As Range '<--| declare a module scoped range variable to store the last cell selected by the user, if "valid" 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Target.Address = "$S$15" Then Exit Sub '<-- do nothing if user selected cell with hyperlink 
    Set lastCell = Intersect(Target, Columns("A")) '<-- change "Columns("A") to a named range with your cities 
End Sub 

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
    If lastCell Is Nothing Then Exit Sub '<--| no action if lastCell has not been properly set by 'Worksheet_SelectionChange()' 

    If Target.Type = msoHyperlinkRange And Target.Range.Address = "$S$15" Then 
     Application.ScreenUpdating = False 
     Sheet15.Visible = True 
     Sheet15.ListObjects("Table17").Range.AutoFilter Field:=19, Criteria1:=lastCell.Value '<--| set the criteria as 'lastCell' value 
     Sheet15.Activate 
     Application.ScreenUpdating = True 
    End If 
End Sub 

按照評論下面,您更改Columns("A")參考Worksheet_SelectionChange()到您的實際範圍與城市名稱(也許命名範圍

+0

我遇到了一個問題,因爲我已經在這張表上運行了另一個Worksheet_SelectionChange事件。 – Darren

+0

什麼樣的問題? – user3598756

+0

「編譯錯誤:檢測到模糊名稱:Worksheet_SelectionChange」 – Darren

1

注:除非超級鏈接指向自身,ActiveCell.Value將在鏈接目的地的值:使用Target.Range.Value如果你想從包含鏈接的單元格的值。

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
    If Target.Type = msoHyperlinkRange And Target.Range.Address = "$S$15" Then 
     Application.ScreenUpdating = False 
     With Sheet15 
      .Visible = True 
      .ListObjects("Table17").Range.AutoFilter Field:=19, _ 
            Criteria1:=Target.Range.Value 
      .Activate 
     End With 
     Application.ScreenUpdating = True 
    End If 
End Sub 
+0

嗯所以只是想澄清...鏈接只是說「點擊這裏」,所以鏈接的價值並沒有真正改變。我想要做的就是如此,如果用戶點擊一個單元格(說「A13」),我希望鏈接根據A13的值過濾表格。如果這有道理? – Darren

+0

我沒跟着你。用戶點擊一個只是說「點擊這裏」的鏈接,那麼位於何處的過濾表的值?在超鏈接的目的地? A13中有鏈接嗎? –

+0

我想我看到了你所得到的以及我的錯誤可能在哪裏......好吧,說A列是城市列表。如果用戶點擊「芝加哥」的單元格A13,則他可以單擊超鏈接,將其帶到另一張表。該表格將被過濾以顯示「芝加哥」。用戶在技術上是否會點擊兩個單元格的錯誤?所以當用戶點擊超鏈接時,它實際上並沒有提到「芝加哥」,只是把他帶到了桌子上。這是正確的嗎? – Darren