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ậy thì đơn giản dùng code này (Right click lên tab sheet MENU và copy code này , nếu cso code cũ thì xoá đi) sẽ được như ý

bạn có thể xoá , cập nhập thêm các sheet và đổi tên thành dạng T# thì Menu sẽ được cập nhật


PHP:
Private Sub Worksheet_Activate()
    
End Sub

Hoặc thế này cho chuẩn hơn,

PHP:
Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    
    Const cDiaChiDatMenu = "B10"
    Const cDiaChiDatBackToMenu = "R1"
    
    Dim wSheet As Worksheet, CEL As Range, k As Long
    Set CEL = Me.Range(cDiaChiDatMenu)
    CEL.Offset(1).Resize(1000, 100).ClearContents   ''  CEL.Value = "MENU"
    
    For Each wSheet In Worksheets
        With wSheet
            If .Name <> Me.Name And (.Name Like "T#" Or .Name Like "T##") Then
                k = CLng(Replace(.Name, "T", ""))
                .Hyperlinks.Add Anchor:=.Range(cDiaChiDatBackToMenu), Address:="", _
                    SubAddress:="'" & Me.Name & "'!" & cDiaChiDatMenu, TextToDisplay:="MENU"
                Me.Hyperlinks.Add Anchor:=CEL.Offset((k - 1) Mod 10 + 1, 4 * ((k - 1) \ 10)), Address:="", _
                    SubAddress:="'" & .Name & "'!" & cDiaChiDatBackToMenu, TextToDisplay:=wSheet.Name
            End If
        End With
    Next wSheet
End Sub

vẫn cần chú ý

Chú ý nếu cần thì thay đổi địa chỉ các ô tại 2 dòng này
Const cDiaChiDatMenu = "B10"
Const cDiaChiDatBackToMenu = "R1"
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy thì đơn giản dùng code này (Right click lên tab sheet MENU và copy code này , nếu cso code cũ thì xoá đi) sẽ được như ý

bạn có thể xoá , cập nhập thêm các sheet và đổi tên thành dạng T# thì Menu sẽ được cập nhật


PHP:
Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    
    Const cDiaChiDatMenu = "B10"
    Const cDiaChiDatBackToMenu = "R1"
    
    Dim wSheet As Worksheet, CEL As Range, k As Long
    Set CEL = Me.Range(cDiaChiDatMenu)
    CEL.Offset(1).Resize(1000, 100).ClearContents   ''  CEL.Value = "MENU"
    
    For Each wSheet In Worksheets
        If wSheet.Name <> Me.Name And wSheet.Name Like "T*" Then
            With wSheet
                On Error GoTo nextFOR
                k = CLng(Replace(.Name, "T", ""))
                .Hyperlinks.Add Anchor:=.Range(cDiaChiDatBackToMenu), Address:="", _
                    SubAddress:="'" & Me.Name & "'!" & cDiaChiDatMenu, TextToDisplay:="MENU"
                Me.Hyperlinks.Add Anchor:=CEL.Offset((k - 1) Mod 10 + 1, 4 * ((k - 1) \ 10)), Address:="", _
                    SubAddress:="'" & .Name & "'!" & cDiaChiDatBackToMenu, TextToDisplay:=wSheet.Name
            End With
        End If
nextFOR: Err.Clear
    Next wSheet
End Sub
- Quá chuẩn luôn, Bác tài Thật sửa code trong chớp mắt. Còn em chưa biết khi nào thì hiểu và viết được
- Em xin cảm ơn bác nhiều!./.
 
Upvote 0
- Quá chuẩn luôn, Bác tài Thật sửa code trong chớp mắt. Còn em chưa biết khi nào thì hiểu và viết được
- Em xin cảm ơn bác nhiều!./.

lấy code bài #61 cho chuẩn hơn và ngắn gọn hơn,

Nhanh mà, có gì đâu bạn nắm vững lý thuyết VBA cơ bản thì mấy cái này chuyện nhỏ như con thỏ ấy mà, đừng thần tượng cao siêu gì cả cứ học cơ bản thì sẽ làm được hết,
 
Lần chỉnh sửa cuối:
Upvote 0
em thì copy và patse code của các bác vào nhưng nó chỉ chạy được một lần là sao. sau khi em tắt máy khởi động lại, code bị biến mất luôn. Mong các bác cho ý kiến ạ. mặc dù em đã nhấn Alt + Q rồi Trl + S để lưu mà không được. Mong các bác giúp đỡ. Thanks!
 
Upvote 0
em thì copy và patse code của các bác vào nhưng nó chỉ chạy được một lần là sao. sau khi em tắt máy khởi động lại, code bị biến mất luôn. Mong các bác cho ý kiến ạ. mặc dù em đã nhấn Alt + Q rồi Trl + S để lưu mà không được. Mong các bác giúp đỡ. Thanks!
Copy xode và lưu lại file dưới dạng dạng .xls chắc là được
 
Upvote 0
Tôi muốn tạo ra một file excel dùng quản lí thu phát vận đơn điện tử. Trong đó thể hiện được ngày nhận hàng, ngày phát hàng, số tiền thu được, hàng trả về, hàng phát không thành công và thống kê tỉ lệ phát thành công trong tháng. ai có thể giúp tôi xin cảm ơn!-0-/.
 
Upvote 0
Tôi muốn tạo ra một file excel dùng quản lí thu phát vận đơn điện tử. Trong đó thể hiện được ngày nhận hàng, ngày phát hàng, số tiền thu được, hàng trả về, hàng phát không thành công và thống kê tỉ lệ phát thành công trong tháng. ai có thể giúp tôi xin cảm ơn!-0-/.

ai mà làm cho bạn
thuê một nhân viên biết office văn phòng người ta làm cho
còn ko, thì bạn phải xây dựng cái sườn, có số liệu..........muốn xử lý cái gì thì người ta giúp cho
 
Upvote 0
Em thử copy sheet index của anh vào file cell của em thì nó hiện ra mục lục hết, nhưng click vào mỗi link thì nó không nhảy sang sheet mang tên như vậy mà báo lỗi reference is not valid, bác sửa giúp em với ạ
 
Upvote 0
Chào bạn,có cách nào chuyển mục lục các sheet thành mục lục các file trong một thư mục không bạn.
 
Upvote 0
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
Rất cần bạn hướng dẫn về vấn đề này. bạn có thể hướng dẫn cách làm 1 cách cụ thể gửi tới mail: minhtienttyt@gmail.com giúp mình được ko. mình gà mờ về món này quá. thanks
 
Upvote 0
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....
chủ thớt cho mình hỏi ngu tí. sao đoạn code mục lục sheet này VD làm ở 1 file này thì được nhưng khi copy code ở file cell đã chạy được rồi paste sang cell khác chưa có code thì lại lỗi "Compile error: Invalid use of Me Keyword" xin nhờ cao nhân chỉ giáo giúp ạ
 
Upvote 0
em chào các anh chị ạ. cái này hay quá. em làm nhiều list hàng nhỏ nên cái này rất cần thiết ạ.
em cảm ơn anh chị nhiều ạ.
Bài đã được tự động gộp:

lấy code bài #61 cho chuẩn hơn và ngắn gọn hơn,

Nhanh mà, có gì đâu bạn nắm vững lý thuyết VBA cơ bản thì mấy cái này chuyện nhỏ như con thỏ ấy mà, đừng thần tượng cao siêu gì cả cứ học cơ bản thì sẽ làm được hết,
chào bạn. không biết mình có thể hỏi chút được ko ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom