Có thể bạn quan tâm: Cách Chèn Hình Ảnh Vào Ô Trong Excel: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
1. Giới thiệu chung về macro trong Excel
Macro là một tập hợp các lệnh được ghi lại hoặc viết bằng ngôn ngữ lập trình VBA (Visual Basic for Applications) nhằm tự động hoá các thao tác lặp đi lặp lại trong Excel. Khi sử dụng đúng, macro giúp người dùng tiết kiệm thời gian, giảm thiểu sai sót và nâng cao hiệu suất làm việc. Tuy nhiên, không phải lúc nào macro cũng chạy suôn sẻ. “Excel không chạy được macro” là một trong những vấn đề phổ biến mà người dùng, dù là mới bắt đầu hay đã có kinh nghiệm, đều có thể gặp phải.
Bài viết này sẽ cung cấp một cái nhìn toàn diện về nguyên nhân gây ra lỗi không chạy macro, đồng thời đưa ra các giải pháp chi tiết, từng bước một, giúp bạn khắc phục và đưa Excel trở lại trạng thái hoạt động bình thường.
Có thể bạn quan tâm: Cách Sử Dụng Excel Index Match Với Nhiều Điều Kiện (multiple Criteria) – Hướng Dẫn Chi Tiết Từ A Đến Z
2. Các nguyên nhân phổ biến khiến macro không chạy được
2.1. Cài đặt bảo mật macro (Macro Security)
Excel có tính năng bảo mật macro để ngăn chặn mã độc. Nếu mức độ bảo mật được thiết lập quá cao (ví dụ “Disable all macros without notification”), mọi macro sẽ bị vô hiệu hoá ngay cả khi người dùng muốn chạy chúng.
2.2. File Excel được mở ở chế độ “Protected View”
Khi mở tài liệu tải về từ Internet, email hoặc một nguồn không tin cậy, Excel sẽ đưa file vào chế độ Protected View. Trong chế độ này, macro sẽ không thể chạy cho đến khi người dùng cho phép.
2.3. Lỗi trong mã VBA
- Cú pháp sai: Thiếu dấu chấm phẩy, dấu ngoặc, hoặc sử dụng từ khóa không hợp lệ.
- Tham chiếu (Reference) bị mất: Khi macro sử dụng các thư viện bên ngoài (như Microsoft Scripting Runtime) mà trên máy không có hoặc không được tham chiếu đúng.
- Biến chưa được khai báo: Khi Option Explicit được bật, mọi biến phải được khai báo trước khi sử dụng.
- Lỗi runtime: Ví dụ: truy cập một sheet không tồn tại, chia cho 0, hoặc tệp tin không tìm thấy.
2.4. Môi trường Excel không tương thích
- Phiên bản Excel khác nhau: Macro viết trên Excel 2026 có thể không hoạt động đúng trên Excel 2007 hoặc trên phiên bản Office 365 nếu sử dụng các hàm mới.
- Kiến trúc 32-bit vs 64-bit: Một số thư viện API chỉ hỗ trợ 32-bit, gây lỗi khi chạy trên Excel 64-bit.
2.5. Đối tượng hoặc bộ dữ liệu bị khóa (Locked)
Khi workbook hoặc worksheet đang ở chế độ bảo vệ (protected) hoặc được mở ở chế độ chỉ đọc, các macro thao tác thay đổi dữ liệu sẽ bị chặn.
2.6. Add‑ins hoặc phần mềm bên thứ ba can thiệp
Một số add‑ins (như các công cụ bảo mật, phần mềm quản lý giấy phép) có thể chặn việc thực thi macro hoặc gây xung đột.
2.7. Thiếu quyền quản trị (Admin rights)
Trong môi trường doanh nghiệp, máy tính có thể được cấu hình để người dùng không có quyền chạy macro hoặc không có quyền truy cập vào các thư mục hệ thống cần thiết.
2.8. Định dạng file không hỗ trợ macro
Nếu file được lưu dưới định dạng .xlsx (không hỗ trợ macro) thay vì .xlsm hoặc .xlsb, mọi macro sẽ không tồn tại trong file.
Có thể bạn quan tâm: Excel In What I Do: Bí Quyết Thành Công Và Nâng Cao Hiệu Suất Công Việc
3. Kiểm tra và khắc phục từng nguyên nhân
3.1. Điều chỉnh cài đặt bảo mật macro

Có thể bạn quan tâm: Cách Giữ Hàng Ở Trên Cùng Trong Excel: Hướng Dẫn Chi Tiết Và Thực Hành
- Mở Excel → File → Options → Trust Center → Trust Center Settings…
- Chọn Macro Settings.
- Đối với môi trường cá nhân, bạn có thể chọn Disable all macros with notification (khuyến nghị) hoặc Enable all macros (không an toàn).
- Đối với môi trường doanh nghiệp, hãy tham khảo IT để thiết lập chính sách phù hợp.
- Nhấn OK và khởi động lại Excel để các thay đổi có hiệu lực.
Lưu ý: Khi bật “Enable all macros”, bạn sẽ mất một lớp bảo vệ chống lại mã độc. Hãy luôn chắc chắn nguồn gốc file macro.
3.2. Rời khỏi Protected View
- Khi mở file, nếu xuất hiện thanh màu vàng “Protected View”, nhấn Enable Editing.
- Nếu muốn tự động bỏ Protected View cho một nguồn tin cậy:
- Vào File → Options → Trust Center → Trust Center Settings… → Protected View.
- Bỏ tick các tùy chọn tùy thuộc vào nguồn (Internet, Outlook, etc.) hoặc thêm thư mục tin cậy vào Trusted Locations.
3.3. Kiểm tra và sửa lỗi mã VBA
3.3.1. Mở cửa sổ VBA Editor
- Nhấn Alt + F11 để vào VBA Editor.
- Kiểm tra Immediate Window (Ctrl + G) để xem thông báo lỗi khi chạy macro.
3.3.2. Sử dụng tính năng Compile VBA Project
- Trong VBA Editor, vào Debug → Compile VBAProject.
- Nếu có lỗi cú pháp, Excel sẽ chỉ ra vị trí và mô tả lỗi. Sửa lại và compile lại cho đến khi không còn lỗi.
3.3.3. Kiểm tra References
- Vào Tools → References.
- Nếu có mục “Missing: …”, bỏ tick hoặc tìm và cài đặt thư viện cần thiết.
- Đối với các API declare, kiểm tra kiến trúc 32/64-bit và thay đổi khai báo nếu cần (sử dụng
PtrSafecho 64-bit).
3.3.4. Kiểm tra Option Explicit
- Nếu
Option Explicitđược bật, mọi biến phải được khai báo. Thêm các khai báoDimhoặcPrivateở đầu module.
3.3.5. Xử lý lỗi runtime
- Thêm cấu trúc
On Error GoTo ErrHandlerđể bắt và xử lý lỗi. - Kiểm tra tồn tại sheet, range, file trước khi truy cập:
If Not WorksheetExists("Data") Then MsgBox "Sheet 'Data' không tồn tại!", vbCritical Exit Sub
End If
3.3.6. Kiểm tra phiên bản Excel
- Nếu macro sử dụng hàm mới (ví dụ:
XLOOKUP,FILTER), đảm bảo file được mở trên Excel 365 hoặc 2026 trở lên. - Đối với các hàm cũ, thay thế bằng cách viết lại logic hoặc dùng
Application.WorksheetFunction.
3.4. Đối phó với môi trường không tương thích
3.4.1. Kiểm tra kiến trúc 32-bit vs 64-bit
- Vào File → Account → About Excel để xem kiến trúc.
- Nếu macro gọi API 32-bit, thay đổi khai báo:
#If VBA7 Then Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" _ Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#Else Private Declare Function GetUserName Lib "advapi32.dll" _ Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If
3.4.2. Sử dụng Late Binding
Thay vì tham chiếu trực tiếp tới thư viện, sử dụng late binding để giảm phụ thuộc:
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
3.5. Mở khóa workbook/worksheet
- Kiểm tra xem workbook có được bảo vệ bằng mật khẩu không: Review → Unprotect Workbook.
- Nếu worksheet được bảo vệ: Review → Unprotect Sheet.
- Nếu file ở chế độ chỉ đọc (Read‑Only), lưu lại dưới tên mới hoặc thay đổi quyền file trên hệ thống.
3.6. Kiểm tra add‑ins và phần mềm bên thứ ba
- Vào File → Options → Add‑ins.
- Ở dưới Manage, chọn COM Add‑ins → Go….
- Tạm thời bỏ tick các add‑ins không cần thiết và khởi động lại Excel để kiểm tra.
- Nếu vẫn không chạy, thử khởi động Excel ở Safe Mode (nhấn
Ctrlkhi khởi động Excel) để xem có xung đột nào không.
3.7. Kiểm tra quyền quản trị
- Đối với môi trường doanh nghiệp, hỏi bộ phận IT xem có chính sách Group Policy chặn macro không.
- Nếu bạn không có quyền admin, thử chạy Excel “as Administrator” (nhấp chuột phải → Run as administrator).
- Đảm bảo thư mục chứa file macro không bị chặn (Properties → Unblock nếu có thông báo “This file came from another computer”).
3.8. Đảm bảo định dạng file hỗ trợ macro
- Khi lưu file, chọn Save As → Excel Macro‑Enabled Workbook (.xlsm) hoặc Excel Binary Workbook (.xlsb).
- Nếu file hiện tại là .xlsx, macro sẽ không tồn tại; bạn cần sao chép mã VBA sang một workbook mới có định dạng hỗ trợ macro và lưu lại.
4. Quy trình khắc phục tổng thể (Step‑by‑Step)
Dưới đây là một quy trình chuẩn mà bạn có thể thực hiện khi gặp “Excel không chạy được macro”.
| Bước | Hành động | Mục tiêu |
|---|---|---|
| 1 | Kiểm tra thông báo lỗi (nếu có) | Xác định nhanh nguyên nhân (bảo mật, protected view, runtime…) |
| 2 | Mở Trust Center → Macro Settings → chọn “Disable all macros with notification” | Cho phép Excel hiển thị cảnh báo khi macro bị chặn |
| 3 | Nếu file ở Protected View → Enable Editing | Rời khỏi chế độ bảo vệ tạm thời |
| 4 | Kiểm tra định dạng file (xlsm/xlsb) | Đảm bảo macro tồn tại trong workbook |
| 5 | Mở VBA Editor (Alt+F11) → Debug → Compile | Phát hiện lỗi cú pháp, missing references |
| 6 | Kiểm tra Tools → References | Sửa missing libraries, chuyển sang late binding nếu cần |
| 7 | Kiểm tra bảo vệ workbook/worksheet | Unprotect nếu cần |
| 8 | Kiểm tra add‑ins → tắt tạm thời | Loại bỏ xung đột phần mềm |
| 9 | Kiểm tra kiến trúc 32/64-bit → sửa declare | Đảm bảo API calls tương thích |
| 10 | Kiểm tra quyền truy cập (admin, read‑only) | Đảm bảo có quyền thay đổi dữ liệu |
| 11 | Chạy lại macro | Xác nhận đã khắc phục |
Nếu sau các bước trên macro vẫn không chạy, bạn có thể:
- Tạo một workbook mới và sao chép mã VBA vào đó để loại trừ lỗi file hỏng.
- Thử trên máy tính khác để kiểm tra môi trường (phiên bản Excel, policy).
- Liên hệ hỗ trợ: Gửi file và mô tả lỗi cho chuyên gia VBA hoặc bộ phận IT.
5. Một số mẹo và thực tiễn tốt khi làm việc với macro
- Luôn lưu bản sao lưu: Trước khi chạy macro trên dữ liệu quan trọng, sao lưu file hoặc tạo bản sao “test”.
- Sử dụng
Option Explicit: Buộc khai báo biến, giảm lỗi không mong muốn. - Ghi log lỗi: Thêm đoạn code ghi lỗi vào file log để dễ dàng theo dõi.
Sub Example() On Error GoTo ErrHandler '--- code của bạn --- Exit Sub
ErrHandler: Dim fso As Object, txt As Object Set fso = CreateObject("Scripting.FileSystemObject") Set txt = fso.OpenTextFile(ThisWorkbook.Path & "\MacroErrorLog.txt", 8, True) txt.WriteLine Now & " - " & Err.Number & ": " & Err.Description txt.Close MsgBox "Đã xảy ra lỗi, xem file MacroErrorLog.txt để biết chi tiết.", vbCritical
End Sub
- Sử dụng
Trusted Locations: Thêm thư mục chứa macro vào danh sách tin cậy để tránh Protected View. - Kiểm tra cập nhật Office: Đôi khi lỗi liên quan tới bug trong Excel, cập nhật bản mới có thể giải quyết.
- Tránh dùng
SelectvàActivate: Các lệnh này làm macro chậm và dễ bị lỗi khi workbook không ở trạng thái mong muốn.
6. Các trường hợp đặc biệt và cách xử lý
6.1. Macro không chạy trên Office 365 Online (Excel Web)
Excel Online không hỗ trợ chạy macro VBA. Nếu người dùng mở file .xlsm trên trình duyệt, macro sẽ không thực thi. Giải pháp:
- Mở file bằng Excel Desktop (cài đặt Office) để chạy macro.
- Nếu cần chia sẻ tính năng tự động hoá, cân nhắc chuyển sang Office Scripts (TypeScript) hoặc Power Automate.
6.2. Macro bị chặn khi gửi qua email
Khi nhận file .xlsm qua email, Outlook có thể tự động chuyển file vào Protected View. Người nhận cần:
- Nhấn Enable Editing → Enable Content.
- Hoặc lưu file vào ổ đĩa, mở bằng Excel Desktop và thực hiện các bước bảo mật như ở mục 3.1.
6.3. Macro gây “crash” Excel
Nếu macro gây Excel treo hoặc “Not Responding”:
- Kiểm tra vòng lặp vô hạn (
Do While True,For i = 1 To 1000000mà không thoát). - Thêm
DoEventstrong vòng lặp dài để cho phép Excel cập nhật UI. - Kiểm tra việc tạo/giải phóng đối tượng COM (Set obj = Nothing).
- Sử dụng Task Manager để dừng Excel nếu cần, sau đó mở lại trong Safe Mode để sửa mã.
7. Tổng kết
“Excel không chạy được macro” có thể xuất phát từ nhiều nguyên nhân: cài đặt bảo mật, protected view, lỗi mã VBA, môi trường không tương thích, quyền truy cập, hoặc xung đột phần mềm. Việc xác định chính xác nguyên nhân là bước quan trọng nhất, sau đó áp dụng các giải pháp chi tiết đã nêu sẽ giúp bạn khôi phục lại khả năng tự động hoá trong Excel.
Hãy luôn tuân thủ các nguyên tắc an toàn khi làm việc với macro:
- Chỉ chạy macro từ nguồn tin cậy.
- Giữ bản sao lưu dữ liệu.
- Sử dụng cấu trúc lỗi và log để dễ dàng debug.
- Đảm bảo môi trường (phiên bản, kiến trúc, quyền) phù hợp.
Với kiến thức và quy trình trên, bạn sẽ tự tin xử lý mọi tình huống “Excel không chạy được macro”, giúp công việc của mình trở nên mượt mà và hiệu quả hơn. Nếu vẫn gặp khó khăn, đừng ngần ngại tìm kiếm sự hỗ trợ từ cộng đồng VBA, diễn đàn Microsoft hoặc bộ phận IT của công ty. Chúc bạn thành công!

Tiến sĩ Lê Thống Nhất sinh năm 1955 tại Nghệ An, là nhà giáo, nhà báo và doanh nhân trong lĩnh vực giáo dục. Ông từng giảng dạy Toán học tại Trường THPT Chuyên Phan Bội Châu và đảm nhiệm nhiều vai trò trong ngành giáo dục, từ viết sách, biên soạn tài liệu đến sáng lập các dự án hỗ trợ học tập trực tuyến.
Ông là người sáng lập BigSchool – nền tảng giáo dục trực tuyến kết nối giáo viên và học sinh cả nước. Ngoài ra, ông còn nổi tiếng với vai trò tác giả, diễn giả truyền cảm hứng và khách mời trên nhiều chương trình truyền hình, trong đó có “Ai là triệu phú” trên truyền hình VTV.
Trong suốt sự nghiệp, Tiến sĩ Lê Thống Nhất đã nhận nhiều giải thưởng giáo dục và được biết đến như một người luôn đổi mới, ứng dụng công nghệ vào dạy và học, góp phần lan tỏa tri thức và niềm say mê học tập cho thế hệ trẻ.
