Excel表格目录,可以自动化更新

Excel表格目录,可以自动化更新

Excel表格目录,可以自动化更新

一、实现的功能:

一旦增加新的子表,目录页的子表链接可以立即自动更新,同时,子表页自动生成返回目录页的链接。

让多子表的工作簿管理,更加简单、更加高效。

1
2

二、VBA代码如下:

主要实现的原理:

VBA的工作簿事件、工作表事件。

1、工作簿事件,实现工作簿模板打开的时候,默认更新一次工作表目录;

2、工作表事件,实现新增工作表的时候,触发自动化更新工作表目录;

Private Sub Workbook_Activate()
    Call 目录自动生成
End Sub

Private Sub Workbook_NewSheet(ByVal Sh As Object)
    Call 目录自动生成
End Sub

Private Sub 目录自动生成()
    Dim sht As Worksheet, xrow As Integer, iMark%, iSht As Worksheet
    Application.ScreenUpdating = False
    
    For Each sht In Worksheets
        If sht.Name = "目录" Then iMark = 1: Exit For
    Next
    If iMark = 0 Then
        Set iSht = Worksheets.Add(before:=Worksheets(1))
        iSht.Name = "目录"
        ActiveWindow.DisplayGridlines = False
    End If
        
    xrow = 2
    Set iSht = Sheets("目录")
    With iSht
        .UsedRange.ClearContents              '建立目前前,先清除目录页的内容
        .Range("A1") = "序号"
        .Range("B1") = "子表名称"
        For Each sht In Worksheets
            If sht.Name <> "目录" And sht.Visible = xlSheetVisible Then          '排除目录页也生成子表目录,同时也不生成隐藏子表的目录
                .Cells(xrow, "A").Value = xrow - 1
                .Hyperlinks.Add Anchor:=.Cells(xrow, "B"), Address:="", SubAddress:="'" & sht.Name & "'!A1", TextToDisplay:=sht.Name
                xrow = xrow + 1
            End If
        Next
    
        With .Range("A1:B5000")
            .NumberFormatLocal = "G/通用格式"
            .Font.Name = "微软雅黑"
        End With
        .Range("A1:A5000").HorizontalAlignment = Excel.xlCenter
        .Range("B:B").Columns.AutoFit
    End With
    
    Call 创建表格目录返回链接
    Application.ScreenUpdating = True
End Sub

Private Sub 创建表格目录返回链接()
    Dim sht As Worksheet, B As Button, Shtn$
    On Error Resume Next
    Shtn = "目录"
    For Each sht In Worksheets
        With sht
            If .Name <> Shtn Then
                Call 删除表格目录(sht)
                Set B = .Buttons.Add(0, 0, 60, 30)  '新建按钮
                With B
                    .Name = Shtn
                    .Characters.Text = "返回目录" '按钮的标题
                    .OnAction = "Thisworkbook.返回目录"        '为按键指定处理子过程
                End With
            End If
        End With
    Next
    Set B = Nothing
End Sub

Private Sub 返回目录()
    ThisWorkbook.Sheets("目录").Activate
End Sub

Sub 删除表格目录(sht As Worksheet)
    Dim n As Integer, i%, j%, objShp As Shape
    Application.DisplayAlerts = False
    For Each objShp In sht.Shapes
        If objShp.Type = 8 Then objShp.Delete
    Next
    Application.DisplayAlerts = True
End Sub

三、代码存放的位置:

新建Excel表格,创建“目录”工作薄。
ALT+F11,打开VBA代码编辑界面,然后找到ThisWorkbook,双击打开,然后在右边的VBA代码编辑栏里面,粘贴代码。最后工作簿另存为,.xlsm格式。
3

四、使用有问题,或者不知道怎么使用VBA代码,建议直接下载模板使用:

链接:https://pan.baidu.com/s/15my6WG1rdk-MSQYIbPsCTQ
提取码:967q

来源:知乎@职场老鸟
https://zhuanlan.zhihu.com/p/661420923

©版权声明
THE END
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容