怎么样批量生成excel的sheet名称目录链接

发布网友 发布时间:2022-04-23 14:12

我来回答

3个回答

热心网友 时间:2022-04-26 19:21

背景:一个工作簿,N个工作表,需要按照每个工作表的名称自动生成目录,并有超链接。

实现方法非常之简单,一公式即定。
实现步骤
一、定义名称
CTRL+F3 - 新建名称
名称:AllShs
范围:工作簿
引用位置:=REPLACE(GET.WORKBOOK(1),1,FIND("]",GET.WORKBOOK(1)),)&T(NOW())
GET.WORKBOOK(1)是宏表函数,以[Book1.xls]Sheet1的形式返回工作簿中所有工作表名的水平数组;
REPLACE(GET.WORKBOOK(1),1,FIND…是为了去掉前面的工作簿名,只保留工作表名;
T(NOW())="" 不影响公式结果,而NOW是易失性函数,可以使工作表改名或增加、删除、移动工作表时,公式能自动重新计算。
二、输入公式
=IF(ROW()>COUNTA(AllShs),"",HYPERLINK("#"&INDEX(AllShs,ROW())&"!A1","GoTo "&INDEX(AllShs,ROW())&"!A1"))
在任意单元格输入以上公式,下拉。
公式的中文解析 - 判断行号大于工作表数量则置空,不然,则运用HYPERLINK函数为工作表建立超链接。公式中AllShs为定义的名称,也是关建所在。
三、宏代码(非原创)

Sub mulu()
On Error GoTo Tuichu
Dim i As Integer
Dim shtcount As Integer
Dim SelectionCell As Range

shtcount = Worksheets.Count
If shtcount = 0 Or shtcount = 1 Then Exit Sub
Application.ScreenUpdating = False
For i = 1 To shtcount
If Sheets(i).Name = "目录" Then
Sheets("目录").Move before:=Sheets(1)
End If
Next i
If Sheets(1).Name <> "目录" Then
shtcount = shtcount + 1
Sheets(1).Select
Sheets.Add
Sheets(1).Name = "目录"
End If
Sheets("目录").Select
Columns("B:B").Delete Shift:=xlToLeft
Application.StatusBar = "正在生成目录…………请等待!"
For i = 2 To shtcount
ActiveSheet.Hyperlinks.Add Anchor:=Worksheets("目录").Cells(i, 2), Address:="", SubAddress:= _
"'" & Sheets(i).Name & "'!R1C1", TextToDisplay:=Sheets(i).Name
Next
Sheets("目录").Select
Columns("B:B").AutoFit
Cells(1, 2) = "目录"
Set SelectionCell = Worksheets("目录").Range("B1")
With SelectionCell
.HorizontalAlignment = xlDistributed
.VerticalAlignment = xlCenter
.AddIndent = True
.Font.Bold = True
.Interior.ColorIndex = 34
End With
Application.StatusBar = False
Application.ScreenUpdating = True
Tuichu:
End Sub

注意:TextToDisplay:=Sheets(i).Name可以更改为TextToDisplay:=”go to “Sheets(i).Name

显示为:go to 工作表标签

热心网友 时间:2022-04-26 20:39

可以使用VBA来实现,选中有连接的单元格区域,执行下面的宏就可以了:

Sub 更新所有表的超级链接()
    Dim c As Range, st As Worksheet
    For Each c In Selection.Cells
    If c.Value <> "" Then
            If c.Hyperlinks.Count > 0 Then
                c.Hyperlinks(1).SubAddress = Trim(c.Value) & "!A1"
            Else
                c.Hyperlinks.Add Anchor:=c, Address:="", SubAddress:=c.Value & "!A1", TextToDisplay:=c.Value
            End If
    End If
    Next c
End Sub

热心网友 时间:2022-04-26 22:13

使用HYPERLINK公式
http://jingyan.baidu.com/article/624e7459a532e534e8ba5a2c.html

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com