1. Mở Trình chỉnh sửa VBA (VBA Editor)
- Mở file Excel của bạn.
- Nhấn tổ hợp phím Alt + F11.
2. Chèn Module mới và dán Mã
- Trong cửa sổ Project – VBAProject, nhấp chuột phải vào dự án của Workbook hiện tại (ví dụ: VBAProject (Ten_file_cua_ban.xlsm)).
- Chọn Insert
→→Module. - Dán đoạn mã sau vào Module vừa tạo:
Link tải mã: https://drive.google.com/file/d/1PQUPij28G59kJbgs2OZY8WV91GSgkvS8/view?usp=sharing
3. Chạy Macro
- Trong Trình chỉnh sửa VBA, đặt con trỏ vào bất kỳ đâu trong đoạn mã Sub ContinuousPageNumbering().
- Nhấn F5 hoặc nhấp vào nút Run Sub/UserForm (biểu tượng mũi tên xanh).
Kết quả
Macro sẽ tự động:
- Duyệt qua Sheet 1.
- Đếm số trang của Sheet 1 (ví dụ: 3 trang).
- Đặt số trang bắt đầu của Sheet 1 là 1.
- Lưu lại PageCount là
1+3=41+3=4. - Duyệt qua Sheet 2.
- Đếm số trang của Sheet 2 (ví dụ: 5 trang).
- Đặt số trang bắt đầu của Sheet 2 là 4.
- Lưu lại PageCount là
4+5=94+5=9. - Và cứ tiếp tục như vậy cho đến hết các Sheet.
Khi bạn vào Print Preview (Ctrl + P), bạn sẽ thấy số trang được đánh liên tiếp từ Sheet đầu tiên đến Sheet cuối cùng.
Coppy va dán đoạn mã sau vào trong excel
Ghi chú: Nội dung cần hiển thị ở mục lục là ở ô J1″


“Sub ChuyenFontVaMauChu()
' Khai báo biến đại diện cho từng Worksheet
Dim ws As Worksheet
' Lặp qua từng Worksheet trong Workbook hiện tại
For Each ws In ActiveWorkbook.Worksheets
' Đặt Font cho tất cả các ô trong Worksheet đó
ws.Cells.Font.Name = "Times New Roman"
' Đặt màu chữ cho tất cả các ô thành màu Đen
ws.Cells.Font.Color = vbBlack
' (Tùy chọn) Nếu bạn muốn đặt cỡ chữ là 12, hãy bỏ dấu nháy đơn (') ở dòng dưới
' ws.Cells.Font.Size = 12
Next ws
MsgBox "Đã chuyển font sang Times New Roman và màu chữ sang màu đen thành công!", vbInformation
End Sub
Sub DanhSoTrangLienTuc()
' Khai báo biến
Dim ws As Worksheet
Dim sInput As String
Dim startPageNum As Long ' Số trang bắt đầu
Dim currentPageNum As Long ' Số trang hiện tại (dùng để tính toán liên tục)
Dim pagesInSheet As Long ' Số trang in của mỗi sheet
' ----------------------------------------------------------------
' BƯỚC 1: YÊU CẦU NGƯỜI DÙNG NHẬP SỐ TRANG BẮT ĐẦU
' ----------------------------------------------------------------
sInput = InputBox("Nhập số trang bắt đầu cho file Excel này (ví dụ: 101):", "Nhập Số Trang Bắt Đầu")
' Kiểm tra nếu người dùng nhấn Cancel hoặc để trống
If sInput = "" Then
MsgBox "Đã hủy thao tác.", vbExclamation
Exit Sub
End If
' Kiểm tra xem có phải là số dương hay không
If Not IsNumeric(sInput) Or CLng(sInput) < 1 Then
MsgBox "Vui lòng nhập một số nguyên dương hợp lệ.", vbCritical
Exit Sub
End If
startPageNum = CLng(sInput)
currentPageNum = startPageNum ' Khởi tạo số trang bắt đầu
' ----------------------------------------------------------------
' BƯỚC 2: LẶP QUA TỪNG SHEET VÀ THIẾT LẬP SỐ TRANG
' ----------------------------------------------------------------
' Tắt tính năng cập nhật màn hình để chạy nhanh hơn
Application.ScreenUpdating = False
For Each ws In ActiveWorkbook.Worksheets
' Kích hoạt sheet để đảm bảo Excel cập nhật Page Setup
ws.Activate
With ws.PageSetup
' Đặt số trang bắt đầu cho sheet hiện tại
.FirstPageNumber = currentPageNum
' Thiết lập Footer (Footer giữa là ví dụ, bạn có thể thay đổi)
' "&P" là mã đại diện cho số trang hiện tại
' "&N" là mã đại diện cho tổng số trang in
.CenterFooter = "Trang &P" ' Hoặc "Trang &P / &N" nếu muốn hiển thị tổng số trang
' Đặt chế độ đánh số trang là tự động (nếu trước đó đã bị chỉnh sửa)
.Order = xlDownThenOver
' Tính toán số trang in thực tế của sheet hiện tại
' Phương pháp này đếm số lần ngắt trang ngang và cộng thêm 1
' LƯU Ý: Số này chỉ chính xác nếu Print Area, Scaling đã được thiết lập trước!
pagesInSheet = ws.HPageBreaks.Count + 1
' Nếu có cả ngắt trang đứng, cần tính cả VPageBreaks (phức tạp hơn)
' Cách đơn giản nhất để có số trang in *chính xác* là dùng Pages.Count
' nhưng Pages.Count chỉ hoạt động chính xác sau khi Preview hoặc In.
' Ta sẽ dùng phương pháp trên (HPageBreaks) và thêm một lời nhắc.
End With
' Cập nhật số trang bắt đầu cho Sheet tiếp theo
currentPageNum = currentPageNum + pagesInSheet
Next ws
' Bật lại tính năng cập nhật màn hình
Application.ScreenUpdating = True
' Thông báo hoàn thành
MsgBox "Đã thiết lập đánh số trang liên tục. Số trang bắt đầu của file là: " & startPageNum & vbCrLf & _
"Số trang bắt đầu của sheet tiếp theo (sau file này) sẽ là: " & currentPageNum, vbInformation
End Sub
Sub Create_TOC_On_DANH_MUC_With_Global_PageNumber_V5_Final()
Dim ws As Worksheet
Dim tocSheet As Worksheet
Dim rowIndex As Long
Dim cellJ1Value As String
Dim startPageNumber As Long
Dim pagesInSheet As Long
Dim stt As Long
' --- Thiết lập Tên Sheet Mục Lục ---
Const TOC_SHEET_NAME As String = "DANH MUC"
' --- Thiết lập Font và Cỡ chữ ---
Const FONT_NAME As String = "Times New Roman"
Const FONT_SIZE As Long = 12
' ------------------------------------
' Tắt cập nhật màn hình
Application.ScreenUpdating = False
' Kiểm tra xem Sheet DANH MUC đã tồn tại chưa và thiết lập
On Error Resume Next
Set tocSheet = ThisWorkbook.Sheets(TOC_SHEET_NAME)
If tocSheet Is Nothing Then
Set tocSheet = ThisWorkbook.Sheets.Add(Before:=ThisWorkbook.Sheets(1))
tocSheet.Name = TOC_SHEET_NAME
End If
On Error GoTo 0
' 1. Xóa dữ liệu cũ, thiết lập Font & Cỡ chữ chung
Application.DisplayAlerts = False
tocSheet.Cells.ClearContents
Application.DisplayAlerts = True
With tocSheet.Cells
.Font.Name = FONT_NAME
.Font.Size = FONT_SIZE
End With
' 2. Thiết lập Tiêu đề cột
With tocSheet
' Tiêu đề chính
.Range("A1").Value = "MỤC LỤC TRANG GIẤY"
.Range("A1").Font.Bold = True
.Range("A1").Font.Size = 16
' Tiêu đề cột (Bắt đầu từ hàng 3)
.Range("A3").Value = "STT" ' Cột A: STT
.Range("B3").Value = "Tên Trang Tính (Nội dung)" ' Cột B: Tên Sheet
.Range("C3").Value = "Nội dung ô J1" ' Cột C: Nội dung J1
.Range("D3").Value = "Trang" ' Cột D: Trang
' Định dạng Tiêu đề cột
.Range("A3:D3").Font.Bold = True
.Range("A3:D3").Interior.Color = RGB(220, 220, 220)
.Range("A3:D3").Borders.LineStyle = xlContinuous
.Range("A3:D3").HorizontalAlignment = xlCenter
' Thiết lập độ rộng cột
.Columns("A").ColumnWidth = 8 ' STT
.Columns("B").ColumnWidth = 35 ' Tên Trang Tính
.Columns("C").ColumnWidth = 35 ' Nội dung J1
.Columns("D").ColumnWidth = 10 ' Trang
End With
rowIndex = 4 ' Bắt đầu ghi dữ liệu từ hàng thứ 4
stt = 1 ' Khởi tạo số thứ tự
' 3. Duyệt qua tất cả các sheet trong Workbook
For Each ws In ThisWorkbook.Worksheets
' Bỏ qua sheet Mục Lục (DANH MUC)
If ws.Name <> TOC_SHEET_NAME Then
' 1. GHI STT (Cột A)
tocSheet.Cells(rowIndex, 1).Value = stt
' 2. TẠO HYPERLINK (Cột B: Tên Trang Tính)
tocSheet.Hyperlinks.Add _
Anchor:=tocSheet.Cells(rowIndex, 2), _
Address:="", _
SubAddress:="'" & ws.Name & "'!A1", _
TextToDisplay:=ws.Name
' 3. Lấy giá trị của ô J1 và ghi vào cột C
On Error Resume Next
cellJ1Value = ws.Range("J1").Value
If Err.Number <> 0 Then
cellJ1Value = "(Lỗi đọc J1)"
Err.Clear
End If
On Error GoTo 0
tocSheet.Cells(rowIndex, 3).Value = cellJ1Value
' 4. Lấy và GHI SỐ TRANG BẮT ĐẦU (Cột D)
startPageNumber = ws.PageSetup.FirstPageNumber
If startPageNumber = xlAutomatic Then startPageNumber = 1
tocSheet.Cells(rowIndex, 4).Value = startPageNumber
' Tăng biến đếm
rowIndex = rowIndex + 1
stt = stt + 1
End If
Next ws
' 5. Hoàn tất và Định dạng
tocSheet.Range("A4:A" & rowIndex - 1).HorizontalAlignment = xlCenter ' Căn giữa STT
tocSheet.Range("D4:D" & rowIndex - 1).HorizontalAlignment = xlCenter ' Căn giữa số trang
tocSheet.Activate
Application.ScreenUpdating = True
MsgBox "Đã tạo Mục Lục thành công với STT và font Times New Roman 12!", vbInformation
End Sub