我有一个代码,允许我按照指向同一工作簿中的单独工作表的超链接,并通过与我的超链接关联的值筛选此工作表。请注意,我首先在VBA进程之外创建超链接。我就是这样做的:
a)在Developer选项卡下打开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?
尝试更改此行,因为它当前将引用新打开的工作簿。您可能需要更改工作表索引(或名称)
lField = ThisWorkbook.Sheets(1).Cells(1, 1).EntireRow.Find("Isometric Number", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column