VB实现Excel目录工作表超链接:数组无法从第2表开始的问题
解决Excel VBA目录超链接(从第2个工作表开始)的问题
我来帮你搞定这个问题!看你的代码片段,应该是卡在了数组起始索引的设置,还有工作表引用的小错误上。其实不用纠结数组的复杂声明,我们可以用更直观的方式实现需求,当然如果一定要用数组,我也给你补上方案。
最简洁的实现代码(推荐)
直接遍历所有工作表,跳过第一个目录页就好,比用数组省心多了:
Sub CreateTableOfContents() Dim wsTOC As Worksheet Dim ws As Worksheet Dim linkRow As Long ' 把第一个工作表设为目录页 Set wsTOC = ThisWorkbook.Worksheets(1) ' 清空目录页原有内容(可选,按需保留) wsTOC.Cells.Clear ' 写个醒目的目录标题 With wsTOC.Range("A1") .Value = "工作表目录" .Font.Bold = True .Font.Size = 14 End With ' 从第2行开始放超链接 linkRow = 2 ' 遍历所有工作表,跳过第一个目录页 For Each ws In ThisWorkbook.Worksheets If ws.Index <> 1 Then ' 添加超链接到目录页,点击直接跳转到对应工作表的A1单元格 wsTOC.Hyperlinks.Add _ Anchor:=wsTOC.Range("A" & linkRow), _ Address:="", _ SubAddress:="'" & ws.Name & "'!A1", _ TextToDisplay:=ws.Name ' 下一行继续 linkRow = linkRow + 1 End If Next ws ' 自动调整列宽,让目录看起来整齐 wsTOC.Columns("A").AutoFit MsgBox "目录生成完成啦!", vbInformation End Sub
你原来代码里的问题点
- 工作表引用错误:
Worksheet(2).Value是错的,工作表对象不需要取Value,直接用Worksheets(索引)或者Worksheets("工作表名称")引用就行。 - 数组没必要复杂化:如果只是单纯跳过第一个工作表,用
For Each遍历+判断索引的方式比数组更简单,不容易搞混起始索引。
如果你一定要用数组实现(比如需要筛选特定工作表)
要是你有特殊需求必须用数组存需要纳入目录的工作表,那可以这么写:
Sub CreateTOCWithArray() Dim arrWorksheets() As Integer Dim i As Integer, x As Integer Dim wsTOC As Worksheet Dim linkRow As Long Set wsTOC = ThisWorkbook.Worksheets(1) linkRow = 2 ' 重新定义数组大小:从第2个到最后一个工作表,总数量是 总表数-1 ReDim arrWorksheets(1 To ThisWorkbook.Worksheets.Count - 1) ' 把第2到最后一个工作表的索引填充到数组里 For i = 2 To ThisWorkbook.Worksheets.Count arrWorksheets(i - 1) = i Next i ' 遍历数组生成超链接 For x = LBound(arrWorksheets) To UBound(arrWorksheets) Set ws = ThisWorkbook.Worksheets(arrWorksheets(x)) wsTOC.Hyperlinks.Add _ Anchor:=wsTOC.Range("A" & linkRow), _ Address:="", _ SubAddress:="'" & ws.Name & "'!A1", _ TextToDisplay:=ws.Name linkRow = linkRow + 1 Next x wsTOC.Columns("A").AutoFit End Sub
两种方案都能实现你的需求,推荐第一种,代码更简洁易懂,后期维护也方便。
内容的提问来源于stack exchange,提问作者Excel-lent
相关产品推荐
相关产品推荐

