Sửa lỗi Excel Macros Have Been Disabled — VBA Macro Bị Chặn Bởi Security

beginner📊 Microsoft Excel2026-03-21| Microsoft Excel 2016/2019/2021/Microsoft 365 trên Windows 10/11

Error Message

Macros have been disabled. Macros might contain viruses or other security hazards.
#excel#macro#bảo mật#vba

Chuyện gì đang xảy ra

Bạn mở một file Excel và thanh cảnh báo màu vàng hiện ra ngay lập tức — hoặc tệ hơn, không có gì xảy ra khi bạn chạy macro và bạn thấy hộp thoại này xuất hiện:

Macros have been disabled. Macros might contain viruses or other security hazards.

File đến từ một chia sẻ mạng, đính kèm email, hoặc tải về từ trình duyệt. Excel đã đánh dấu nó là không an toàn và vô hiệu hóa toàn bộ quá trình thực thi VBA mà không báo gì thêm. Tất cả các thao tác tự động của bạn đều bị tắc.

Tại sao điều này xảy ra

Excel đóng dấu các file tải về từ internet hoặc nhận qua email bằng Mark of the Web (MOTW) — một luồng NTFS ẩn tồn tại sau khi giải nén và sao chép. Khi dấu đó xuất hiện, Trust Center sẽ can thiệp và hoặc là vô hiệu hóa hoàn toàn macro, hoặc yêu cầu xác nhận từ bạn. Các file bạn tạo cục bộ, hoặc nằm trên ổ đĩa được ánh xạ mà bạn đã tin cậy, thường bỏ qua kiểm tra này.

Có ba nguyên nhân có thể gây ra vấn đề này, và chúng không loại trừ nhau:

  • File mang MOTW và cài đặt macro của bạn là "vô hiệu hóa không thông báo"
  • Thư mục chứa file không nằm trong Trusted Location
  • Group Policy (GPO) đang áp đặt giới hạn macro trên toàn công ty — ghi đè tất cả các cài đặt khác

Gỡ lỗi: tìm ra thứ thực sự đang chặn bạn

Bước 1 — Kiểm tra cài đặt Trust Center

Mở File → Options → Trust Center → Trust Center Settings → Macro Settings. Bốn lựa chọn xuất hiện:

  • Disable all macros without notification ← đây là nguyên nhân âm thầm nhất
  • Disable all macros with notification ← hiển thị thanh màu vàng
  • Disable all macros except digitally signed macros
  • Enable all macros (không khuyến nghị)

Nếu đang chọn tùy chọn đầu tiên, bạn sẽ không thấy bất kỳ cảnh báo nào — macro đơn giản là không chạy.

Bước 2 — Kiểm tra xem file có bị chặn ở cấp hệ điều hành không

Nhấp chuột phải vào file .xlsm hoặc .xlsb → Properties. Thấy ô Unblock ở phía dưới? File đó có MOTW. Đây mới là vấn đề thực sự — chỉ thay đổi cài đặt Trust Center sẽ không giải quyết được, vì lệnh chặn nằm ở cấp file, không phải trong Excel.

Bước 3 — Kiểm tra xem có Group Policy áp đặt không

Các cài đặt Trust Center bị mờ xám? GPO đang ghi đè chúng. Chạy lệnh này trong PowerShell để xác nhận:

Get-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Office\16.0\Excel\Security" -Name "VBAWarnings" -ErrorAction SilentlyContinue

Giá trị 4 có nghĩa là macro bị vô hiệu hóa bởi policy. Giá trị 2 có nghĩa là chỉ hiện thông báo. Nếu key không tồn tại, GPO không phải thủ phạm. Nếu máy bị GPO chặn, hãy chuyển thẳng xuống Fix 5.

Giải pháp

Fix 1 — Unblock file (cách nhanh nhất cho file đơn lẻ)

Nhấp chuột phải vào file → Properties → tích Unblock → Apply → OK. Mở lại file. Thanh màu vàng xuất hiện, bạn nhấp "Enable Content", và lần này nó sẽ được ghi nhớ.

Cần xử lý cả một thư mục file? PowerShell giải quyết trong một lệnh:

# Unblock a single file
Unblock-File -Path "C:\reports\monthly_report.xlsm"

# Unblock all xlsm files in a folder
Get-ChildItem -Path "C:\reports" -Filter "*.xlsm" -Recurse | Unblock-File

Fix 2 — Thêm Trusted Location (tốt nhất cho file dùng thường xuyên)

Thường xuyên chạy macro từ cùng một thư mục mỗi tuần? Hãy đặt thư mục đó thành Trusted Location và không còn phải đối phó với cảnh báo bảo mật nữa:

  • File → Options → Trust Center → Trust Center Settings
  • Trusted Locations → Add new location
  • Chọn thư mục của bạn; tích Subfolders of this location are also trusted nếu cần
  • Nhấp OK

Các file trong Trusted Locations bỏ qua tất cả kiểm tra bảo mật macro. Hãy tạo một thư mục riêng — chẳng hạn C:\MacroFiles\ — và lưu các workbook macro sản xuất ở đó. Gọn gàng, nhất quán, không bất ngờ.

Fix 3 — Điều chỉnh mức bảo mật macro (nếu bạn quản lý máy)

Vào File → Options → Trust Center → Trust Center Settings → Macro Settings và chọn Disable all macros with notification. Macro vẫn bị chặn theo mặc định, nhưng bạn sẽ thấy thanh màu vàng và có thể chọn bật từng file. Đây là cài đặt an toàn nhất không gây tắc nghẽn mà Excel cung cấp.

Fix 4 — Ký số dự án VBA (cho file phân phối)

Phân phối workbook có macro cho đồng nghiệp hoặc khách hàng? Chứng chỉ ký mã cho phép người nhận chạy macro của bạn theo chính sách "chỉ ký số" mà không cần thay đổi cài đặt bảo mật của họ. Để tạo chứng chỉ tự ký cho dùng nội bộ:

' Run in elevated PowerShell to create the certificate:
New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=ExcelMacros" -CertStoreLocation Cert:\CurrentUser\My

Sau đó trong Excel: mở VBA editor (Alt+F11) → Tools → Digital Signature → chọn chứng chỉ → ký dự án → lưu dưới dạng .xlsm. Người nhận cần tin cậy chứng chỉ của bạn một lần — sau đó, file chạy bình thường.

Fix 5 — GPO chặn bạn (hướng leo thang)

Giới hạn do policy áp đặt để lại cho bạn hai lựa chọn thực tế mà không cần quyền admin:

  • Trusted Location trên chia sẻ mạng — GPO thường vẫn tuân theo điều này ngay cả khi chặn macro từ internet. Đề nghị IT whitelist một đường dẫn UNC cụ thể như \\fileserver\macros\.
  • Office Scripts — nếu bạn đang dùng Microsoft 365, chúng chạy trên trình duyệt, bỏ qua hoàn toàn VBA và không có bất kỳ giới hạn bảo mật macro nào. Việc chuyển đổi cần nỗ lực, nhưng đây là giải pháp vĩnh viễn.

Xác minh fix đã hoạt động

Dán đoạn này vào một module mới và nhấn Run:

Sub TestMacroEnabled()
    MsgBox "Macros are running! Security fix confirmed.", vbInformation
End Sub

Hộp thoại xuất hiện? Xong. Không có gì xảy ra? Mở Immediate Window (Ctrl+G trong VBA editor) và tìm lỗi — đôi khi macro chạy được nhưng bị lỗi ở một thao tác cụ thể, đó là vấn đề khác với việc bị bảo mật chặn.

Cũng hãy xác nhận Trusted Location của bạn vẫn còn: File → Options → Trust Center → Trust Center Settings → Trusted Locations. Đường dẫn của bạn phải được liệt kê ở đó.

Bài học rút ra

Cái bẫy mà nhiều người mắc phải: họ sửa cài đặt Trust Center, mở lại file, macro vẫn không chạy, nghĩ rằng cài đặt chưa được lưu, rồi lại vào cùng menu đó ba lần nữa. Thủ phạm thực sự là lệnh chặn MOTW ở cấp file. Hãy kiểm tra ô Unblock trong Properties trước khi làm bất cứ điều gì khác — chỉ mất năm giây và loại trừ được một nửa khả năng.

Hãy tạo thói quen ngay từ bây giờ: bất kỳ file macro nào đến qua email hoặc tải về đều được nhấp chuột phải → Unblock trước khi mở. Hai giây trước thay vì mười lăm phút gỡ lỗi sau.

Chạy workbook nặng macro cho cả nhóm? Dành một giờ để thiết lập Trusted Location trên ổ đĩa mạng chia sẻ và ghi lại trong wiki của nhóm. Khoản đầu tư một lần đó sẽ loại bỏ hoàn toàn vấn đề này — kể cả phiên bản lúc 2 giờ sáng.

Related Error Notes