1. 程式人生 > >vba指令碼excel動態建立索引目錄表

vba指令碼excel動態建立索引目錄表

       上程式碼:

'''動態建立目錄表:其他表內容的索引,從其他表的每行中拷貝指定的列,拷貝後第一個單元格超連結到所拷貝的行
Function makeContent()
   
   contentSheetName = "content"
   '清空content表內容
   Sheets(contentSheetName).Select
   Sheets(contentSheetName).Rows("2:65535").Delete   '一張表最多隻能有65535行
   
   '需要從其他表中拷貝的列,如果用例表不同,則修改這個陣列
   copyCol = Array(1, 2, 4, 8, 10)
   
   '迴圈遍歷除"content"之外的其他表
    For Each sh In Worksheets
    If sh.Name <> contentSheetName Then
        '從第二行開始拷貝,因為第一行是表頭
        For r = 2 To usedRowCnt(sh)
            If sh.Cells(r, 1).Value <> "" Then
                '計算“content”表中當前已使用的行數
                curTotalRows = usedRowCnt(Sheets(contentSheetName))
            
                '迴圈拷貝每一列的資料
                i = 0
                 For Each col In copyCol
                    i = i + 1
                    Sheets(contentSheetName).Cells(curTotalRows + 1, i).Value = sh.Cells(r, col).Value
                 Next
            'content中的行的第一格單元格設定超連結,連結到所拷貝表的行
            Sheets(contentSheetName).Hyperlinks.Add Cells(curTotalRows + 1, 1), Address:="", SubAddress:=sh.Name & "!A" & r
            
            End If
        
        Next
        
    End If

    Next
   
    Debug.Print "make conten success"

End Function

如果希望excel檔案每次開啟時更新目錄表,那麼在VB編輯器中,雙擊“ThisWorkBook”,右邊程式碼中寫上如下程式碼:

Private Sub Workbook_Open()
    Call makeContent

End Sub

PS:excel表及vba指令碼上傳到csdn了: