代替繁瑣公式,用VBA生成工作表目錄

韓老師講office2020-03-26 21:26

韓老師曾經寫過一篇文章:

1、函數法:

需要“公式—名稱”處在新建名稱對話框中引用位置輸入公式:

=INDEX(GET.WORKBOOK(1),ROW(A1))&T(NOW())。再利用公式“=IFERROR(HYPERLINK(目錄&"!A1",MID(目錄,FIND("]",目錄)+1,99)),"")”生成目錄。

此方法可行,但公式稍難寫,一不注意就錯了。

2、非函數法:

利用“兼容性報表”生成目錄。這種方法雖沒有太複雜的公式,但不容易被想到,而且生成的目錄帶有單元格地址,看起來不像純正的目錄。

今天介紹VBA的方法,只用簡單的代碼即可生成目錄。

無超鏈接的目錄

在代碼窗口中輸入代碼:

<code>Sub 目錄()
    For x = 2 To Sheets.Count
        Cells(x, 1).Value = Sheets(x).Name
    Next
End Sub/<code>

如下圖:

Excel | 代替繁瑣公式,用VBA生成工作表目錄

此段代碼應用了For-Next循環語句,讀取從第2個一直到最後一個工作表,然後將每個工作表的名稱依次寫入目錄工作中的第1列單元格。

插入一個按鈕,並指定宏,如下圖:

Excel | 代替繁瑣公式,用VBA生成工作表目錄

這種方法簡單,但是生成的目錄沒有超鏈接,不能鏈接到相應工作表,請看下面的方法,可以實現目錄與工作表之間的切換。

有超鏈接的目錄

在代碼窗口中輸入:

<code>Sub 目錄()
Application.ScreenUpdating = False    '關閉屏幕更新
Dim i As Integer, sht As Worksheet, shtname As String
Columns(1).ClearContents       '清除A列
Cells(1, 1) = "目錄"           '“部門費用”工作表A1單元格添加數據“目錄”
i = 1
For Each sht In Worksheets
shtname = sht.Name
If shtname <> ActiveSheet.Name Then
    i = i + 1
    ActiveSheet.Hyperlinks.Add anchor:=Cells(i, 1), Address:="",
    SubAddress:="'" & shtname & "'!a1", ScreenTip:="超鏈接到" & sht.Name & "工作表", TextToDisplay:=shtname
                       '在“部門費用”工作表A列中添加工作表名稱
    With sht
        sht.Hyperlinks.Add anchor:=sht.Cells(1, 10), Address:="",         SubAddress:="部門費用!a" & i, ScreenTip:="返回目錄", TextToDisplay:="返回目錄"
                       '在每一個不是“部門費用”的工作表JI單元格的中添加“返回目錄”按鈕
    End With
End If
Next
Application.ScreenUpdating = True          '開啟屏幕更新
End Sub/<code>

部分語句太長,直接把代碼複製過來觀感不好,大家可以把手機橫過來,可讀性增加一些。

但如果不把代碼放在這裡,只截圖,大家又沒辦法複製。

看代碼截圖:

Excel | 代替繁瑣公式,用VBA生成工作表目錄

效果如下:

Excel | 代替繁瑣公式,用VBA生成工作表目錄

大家可以根據自己處理數據的實際需求選擇合適代碼建議目錄。


分享到:


相關文章: