按照超级链接在源工作簿中按值分隔工作簿和自动筛选

时间:2016-11-17 20:18:11

标签: excel-vba hyperlink autofilter vba excel

我有一个代码,允许我按照指向同一工作簿中单独工作表的超链接,并按照与我的超链接关联的值过滤此工作表。请注意,我首先在VBA进程之外创建超链接。我就这样做了:

a)在“开发人员”选项卡下打开Visual Basic

b)右键单击要添加宏的工作簿,然后单击“插入”>“模块”

c)将以下代码复制并粘贴到模块中:

 Sub Filter(sCriteria As String)

lField = Cells(1, 1).EntireRow.Find("Isometric Number", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column
Range("a1").AutoFilter Field:=lField, _
Criteria1:=sCriteria

End Sub

我的理解是该模块告诉工作簿在超链接选项卡上通过下面调出的特定值自动过滤名为Isometric Number的列。您可以将列名更改为您想要的任何名称,但需要在模块中以及您希望自动过滤器发生的选项卡上进行更改。

D)将以下代码复制并粘贴到主选项卡中(展开Microsoft Excel对象,然后双击主选项卡 - 超链接和我按生命过滤的内容)。

Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
   Call Filter(sCriteria:=Cells(Target.Parent.Row, 2).Value)
End Sub

此代码确定上述模块的过滤条件,以自动过滤。现在它被设置为按照超链接和第二列中同一行中单元格中的值进行过滤。

现在最后提出问题:当我的超链接引用单独的工作簿(而不是同一工作簿中的工作表)时,我收到以下错误:对象变量或未设置块变量(错误91)。当我运行调试工具时,这是突出显示的行:

lField = Cells(1, 1).EntireRow.Find("Isometric Number", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column

我已经对此做了大量阅读,但我很难弄清楚如何阅读和理解代码。最接近答案的是这篇文章:Can Excel vba invoke an autofilter when a hyperlink is clicked to open new workbook?

1 个答案:

答案 0 :(得分:0)

尝试更改此行,因为它当前将引用新打开的工作簿。您可能需要更改工作表索引(或名称)

lField = ThisWorkbook.Sheets(1).Cells(1, 1).EntireRow.Find("Isometric Number", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column