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

Thảo luận trong 'Lập Trình với Excel' bắt đầu bởi LikeIt, 20 Tháng ba 2008.

  1. LikeIt

    LikeIt New Member

    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 

        With Me 
            
    .Columns(1).ClearContents 
            
    .Cells(11) = "INDEX" 
            
    .Cells(11).Name "Index" 
        
    End With 
        
        
    For Each wSheet In Worksheets 
            
    If wSheet.Name <> Me.Name Then 
            M 

            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(M1), Address:=""SubAddress:="Start" wSheet.IndexTextToDisplay:=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....
     

    Các file đính kèm:

    Last edited by a moderator: 20 Tháng ba 2008
  2. anhtuan1066

    anhtuan1066 Well-Known Member

    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:
    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
     

    Các file đính kèm:

    Last edited: 12 Tháng tư 2008
  3. LikeIt

    LikeIt New Member

    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.
     
  4. doilangthang

    doilangthang New Member

    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
     
  5. anhtuan1066

    anhtuan1066 Well-Known Member

    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
     
  6. mymichau

    mymichau New Member

    AnhTuan1066 giải thích giùm em NAME : NoSs = Get.WorkBook(4). Xin cảm ơn.
     
  7. anhtuan1066

    anhtuan1066 Well-Known Member

    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
     
  8. luonchinguoc

    luonchinguoc New Member

  9. anhtuan1066

    anhtuan1066 Well-Known Member

    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
     
  10. connhangheo

    connhangheo New Member

    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
     
  11. anhtuan1066

    anhtuan1066 Well-Known Member

    KO DÙNG DC nghĩa là sao bạn?
     
  12. luonchinguoc

    luonchinguoc New Member

    Bác xem lại nhé, hình như phải viết là sheets("data").select ???? -=.,,
     
  13. anhtuan1066

    anhtuan1066 Well-Known Member

    WorkSheets("Data").Select cũng đúng mà bạn... Tôi thử rồi...
     
  14. ladycat

    ladycat New Member

    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
     
  15. TrungChinhs

    TrungChinhs New Member

    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 ?
     
    Last edited: 21 Tháng mười 2013
  16. Mr Okebab

    Mr Okebab Ngon Ngất Ngây

     
  17. TrungChinhs

    TrungChinhs New Member

     
  18. hung007007

    hung007007 New Member

    worksheets("data").Activate thì được
     
  19. tuongvi76

    tuongvi76 New Member

    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
     
  20. anhtuan1066

    anhtuan1066 Well-Known Member

    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 đó
     

Chia sẻ trang này