Tạo mục lục tự động trong excel?

Liên hệ QC

LikeIt

Thành viên tiêu biểu
Tham gia
16/6/06
Bài viết
415
Được thích
254
Nghề nghiệp
Others
Kính gửi các anh chị,
Em đọc trên một báo nào đó (thực sự ko nhớ) có nói về một VD trong excel là tạo mục lục tự động trong một sheet, để di chuyển các sheet trong bảng tính cho dễ dàng, nhưng khi thực hiện theo chỉ dẫn thì ko đc, ko biết em hiểu có đúng ko? vì em nghĩ khi tạo đc mục lục tự động thì khi thêm hoặc bỏ tên một sheet nào trong file này thì nó sẽ hiện lên trên sheet MUCLUC? mong các anh chị biết về VBA chỉ giúp. Em xin post VD của em làm và nội dung bài báo đã sưu tầm.tks - NHT
Tạo mục lục các Sheet trong Excel 2003


Đây là một thủ thuật mà mình đánh giá là...4 sao cho tính tiện dụng...

Vấn đề:
Khi làm việc với một tập tin Excel (Worbook) có nhiều worksheet (bảng tính), các bạn sẽ gặp nhiều khó khăn khi di chuyển giữa các bảng tính này.

Giải pháp:
Chúng ta sẽ tạo ra một Sheet mới với tên là MụcLục. Sau đó thêm một đoạn code vào Sheet này để tạo mục lục tự động.
{ad_200x200_right}
Các bước thực hiện:
1. Trở về Sheet đầu tiên. Vào Insert > Worksheet. Đặt tên của Sheet này lại thành MụcLục hay để nguyên tùy thích.
2. Right-click lên thẻ của Sheet này chọn View Code.
3. Copy tất cả đoạn Code này vào:
PHP:
Private Sub Worksheet_Activate() 
Dim wSheet As Worksheet 
Dim M As Long 
M = 1 
    With Me 
        .Columns(1).ClearContents 
        .Cells(1, 1) = "INDEX" 
        .Cells(1, 1).Name = "Index" 
    End With 
    
    For Each wSheet In Worksheets 
        If wSheet.Name <> Me.Name Then 
        M = M + 1 
        With wSheet 
            .Range("H1").Name = "Start" & wSheet.Index 
            .Hyperlinks.Add Anchor:=.Range("H1"), Address:="", SubAddress:="Index", TextToDisplay:="Back to Index" 
        End With 
            Me.Hyperlinks.Add Anchor:=Me.Cells(M, 1), Address:="", SubAddress:="Start" & wSheet.Index, TextToDisplay:=wSheet.Name 
        End If 
        Next wSheet 
End Sub
4. Nhấn Alt + Q và Save lại.
5. Từ Excel, vào Tool > Macro > Security. Trong hộp thoại này, chọn mức Low. Vì trong file Excel của bạn có dùng Macro, nên đôi khi mức Macro security ở mức high, đoạn lệnh của bạn sẽ không có tác dụng. Nếu bạn chọn Mediup, bạn sẽ được nhắc là chạy macro không. Trong trường hợp này, bạn chọn Enable Macro để thấy tác dụng.
5. Nhấn Ctrl + W để đóng lại Workbook và mở lại Workbook này.
Đến đây, khi nhấp vào Sheet có tên là MụcLục, bạn sẽ thấy danh sách các bảng tính hiện ra. Nhấp vào Sheet nào mà bạn muốn di chuyển nhanh đến để làm việc....
 

File đính kèm

  • Mucluc.rar
    4.8 KB · Đọc: 4,806
Chỉnh sửa lần cuối bởi điều hành viên:
Vì em cho code vào This Worbook nên nó ko chạy là phải rồi...
Hướng dẩn có đoạn:
2. Right-click lên thẻ của Sheet này chọn View Code.
3. Copy tất cả đoạn Code này vào:
Vậy em cắt đoạn code ấy và cho nó vào Sheet Index đi, nó sẽ chạy ngay lập tức

He... he...
Món này ko cần dùng VBA vẩn làm dc... Dùng công thức quá dể luôn...
Dựa trên nền file GetSheetName (May quá, nghĩ chơi chơi mà giờ có cái để ứng dụng đây)
Xem file... Sheet Index sẽ tự động cập nhật bất kể ta đổi tên sheet, xóa sheet hay thêm sheet gì nó cũng chơi tuốt.... Tất cả chỉ dùng chức năng Hyperlink và các name trong Define Name... 1 Name Link duy nhất nó có thể hiểu dc bạn đang muốn link đến Sheet nào... he...he.. 1 phát 1 cho tất cả...
ANH TUẤN
 

File đính kèm

  • LinkToSheet.xls
    26 KB · Đọc: 4,136
Lần chỉnh sửa cuối:
Upvote 0
Vâng em thấy cái này rất tiện để tự update thành một cái index sau này truy cập rất nhanh.
 
Upvote 0
Kết cục nó hiện lên 1 cái chữ back to index xóa mất mấy dòng dữ liệu của các sheet kia .Ecc chẳng ăn thua lắm
 
Upvote 0
Kết cục nó hiện lên 1 cái chữ back to index xóa mất mấy dòng dữ liệu của các sheet kia .Ecc chẳng ăn thua lắm
Trời... Tất nhiên là tùy từng dử liệu cụ thể chứ... Code hay công thức cùng làm sao lường trước dc cell nào trên bảng tính của bạn là đang trống, đúng ko? Chính vì lẽ đó là trước khi dùng các bạn nên chạy thử trước trên file mới... Nếu thấy có vấn đề gì ko ổn thì bấm Alt + F11, vào cửa sồ VBE để chỉnh lại cho phù hợp... Tôi ngu về VBA mà tôi còn biết phải chỉnh chổ nào, chẳng lẽ bạn ko làm dc? Hi.. hi..
ANH TUẤN
 
Upvote 0
AnhTuan1066 giải thích giùm em NAME : NoSs = Get.WorkBook(4). Xin cảm ơn.
 
Upvote 0
AnhTuan1066 giải thích giùm em NAME : NoSs = Get.WorkBook(4). Xin cảm ơn.
Name ấy dùng để lấy số lượng sheet có trong Workbook... Đây là các hàm thuộc macro 4, chỉ có thể gán vào name để xài chứ ko thể gõ trực tiếp vào cell
Bạn tham khảo thêm về hàm macro 4 tại đây:
http://www.giaiphapexcel.com/forum/forumdisplay.php?s=&daysprune=-1&f=33
và đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=7613
ANH TUẤN
 
Upvote 0
Name ấy dùng để lấy số lượng sheet có trong Workbook... Đây là các hàm thuộc macro 4, chỉ có thể gán vào name để xài chứ ko thể gõ trực tiếp vào cell
Bạn tham khảo thêm về hàm macro 4 tại đây:
http://www.giaiphapexcel.com/forum/forumdisplay.php?s=&daysprune=-1&f=33
và đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=7613
ANH TUẤN

thêm sheet thì INDEX của nó bị hỏng bác ạh
 
Upvote 0
thêm sheet thì INDEX của nó bị hỏng bác ạh
Rất có thể... đó là do tôi sơ xuất trong công thức tại name NoSs...
Name củ:
Mã:
NoSs =GET.WORKBOOK(4)
Sửa lại thành
Mã:
NoSs =GET.WORKBOOK(ROW(INDIRECT("A4")))
Tôi đã post lại file, bạn tải về xem thử.... Chú ý nếu thêm sheet mới thì khi quay lại sheet INDEX bạn bấm F9 để cập nhật nhé
ANH TUẤN
 
Upvote 0
xin lỗi cho em hỏi 1 câu, em có 1 sheet là data, muốn chọn chọn sheet này thì code thế nào, vì ko dùng được worksheets("data").select
 
Upvote 0
Xin chào mọi người!
Tôi đã đọc phần tạo mục lục trong excel và tôi đã làm theo rất tốt, hiện tại trong các sheet đều có một cột lưu về số tiền nợ của người đó, số tiền đó không cố định mà nó được thay đổi theo ngày giờ tôi muốn lấy số tiền nợ cuối cùng của người đó điền vào một cột tổng tiền trong sheet "Mục lục", tương ứng với mỗi người là số tiền nợ của người đó
mọi người giúp tôi với
 
Upvote 0
Theo mình thì dùng cách của bạn Tuấn hay hơn vì dùng cách này thì mỗi lần mở, máy sẽ tạo lại thư mục nên với những File nhiều Sheet và bảng tính có nhiều dữ liệu thì lúc mở rất chậm. Để khắc phục "tạm thời" thì sau khi tạo xong mục lục bạn nên xoá đoạn code này hoặc đánh dấu nháy (') vào đầu các dòng lệnh để tạm thời loại bỏ nó khi nào cần dùng lại thì xoá các dấu nháy đi.
Bạn nào có cách khác chuyên nghiệp ?
 
Lần chỉnh sửa cuối:
Upvote 0
Nguyễn Hương Thơm; Tạo mục lục các Sheet trong Excel 2003 ... Đây là một thủ thuật mà mình đánh giá là...4 sao cho tính tiện dụng... Theo mình thì dùng cách của bạn Tuấn hay hơn vì dùng cách này thì mỗi lần mở đã viết:

Xóa code đi làm gì hả bạn ??? Nó chỉ chạy code đó với sự kiện Workbook_Active, hoặc nếu muốn thì Workbook_Open, hoặc 1 điều kiện nào đó.
VBA thì có đặc điểm là lin h hoạt, vì vậy bạn có thể tùy biến cho các trường hợp của mình :
VD : Khi THÊM/XÓA sheet thì Code này tự động chạy lại, Khi thay đổi tên Sheet thì các chữ trong mục lục sẽ thay đổi theo . . . . .

Mình chả hiểu từ chuyên nghiệp ở đây là gì ???

Thân!
 
Upvote 0
Xóa code đi làm gì hả bạn ??? Nó chỉ chạy code đó với sự kiện Workbook_Active, hoặc nếu muốn thì Workbook_Open, hoặc 1 điều kiện nào đó.
VBA thì có đặc điểm là lin h hoạt, vì vậy bạn có thể tùy biến cho các trường hợp của mình :
VD : Khi THÊM/XÓA sheet thì Code này tự động chạy lại, Khi thay đổi tên Sheet thì các chữ trong mục lục sẽ thay đổi theo . . . . .

Mình chả hiểu từ chuyên nghiệp ở đây là gì ???

Thân!

Cảm ơn Okebab từ chuyên nghiệp Tôi hỏi chính là "Nó chỉ chạy code đó với sự kiện Workbook_Active, hoặc nếu muốn thì Workbook_Open, hoặc 1 điều kiện nào đó...". Mình không rành món code này lắm nên chỉ biết xử lý thủ công (không chuyên nghiệp) như vậy.
 
Upvote 0
anhtuan1066 oi! anh giúp e cách làm chỉ mục trong ecxel với, e cũng copy code của các bạn làm nhưng sao o được. A có thể cho e công thức hay code nào đó o? cám ơn a nhiều
 
Upvote 0
anhtuan1066 oi! anh giúp e cách làm chỉ mục trong ecxel với, e cũng copy code của các bạn làm nhưng sao o được. A có thể cho e công thức hay code nào đó o? cám ơn a nhiều
File của tôi tại bài số #2 dùng công thức thường thôi, chẳng có code gì cả
Bạn mở file của tôi lên, xong bấm Ctrl + F3 sẽ thấy công thức nằm trong đó
 
Upvote 0
Web KT
Back
Top Bottom