Lỗi VBA: Cài đặt thông số ForceVBALoadFromSource trong Registry để VBA biên dịch không bị lỗi (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,774
Được thích
4,403
Giới tính
Nam
Dưới đây là một bài hướng dẫn giúp khắc phục lỗi khởi động tệp có mã VBA.
Đôi khi bạn mở một dự án đã được lưu trong phiên bản ứng dụng trước đó, bạn sẽ gặp sự cố vì ứng dụng không biên dịch lại được.
Sự cố này có thể không tồn tại ở các phiên bản Office mới, các bạn có thể kiểm tra và đặt lại thông số này nếu cần thiết.


Khi đang lặp trình bỗng dưng thực hiện save hoặc đang viết mã, quá trình biên dịch có thông báo như sau:

1733381526788.png


Tất cả những gì bạn cần làm là thêm một mục đăng ký. Ví dụ, đối với Excel:
"Computer\HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & "\Excel\Options\"
bạn thêm một khóa là ForceVBALoadFromSource nếu chưa tồn tại, với DWORD giá trị là 1.

Lỗi này được Microsoft đăng trên diễn đàn của họ tại bài viết, tại bài viết này Microsoft cũng đăng nhiều lỗi có thể đối với VBA

Và bài viết microsoft hướng dẫn khắc phục lỗi này, và các bản vá lỗi

Trích dẫn hướng dẫn cụ thể:

Thực hiện theo các bước trong phần này một cách cẩn thận. Có thể xảy ra sự cố nghiêm trọng nếu bạn sửa đổi sổ đăng ký không đúng cách. Trước khi sửa đổi, hãy sao lưu sổ đăng ký để khôi phục trong trường hợp xảy ra sự cố.

  1. Thoát khỏi tất cả các ứng dụng Microsoft Office.
  2. Khởi động Registry Editor:
    • Trong Windows 10, hãy vào Start , nhập regedit vào hộp Search Windows , sau đó chọn regedit.exe trong kết quả tìm kiếm.
    • Trong Windows 7, hãy nhấp vào Bắt đầu , nhập regedit vào hộp văn bản Tìm kiếm chương trình và tệp , rồi nhấp vào regedit.exe trong kết quả tìm kiếm.
    • Trong Windows 8 và Windows 8.1, hãy di chuyển chuột đến góc trên bên phải, nhấp vào Tìm kiếm , nhập regedit vào hộp văn bản tìm kiếm, rồi nhấp vào regedit.exe trong kết quả tìm kiếm.
  3. Xác định vị trí và chọn khoá đăng ký con sau:
    HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Options\
  4. Trên menu Edit , trỏ tới New , rồi nhấp vào DWORD Value .
  5. Nhập ForceVBALoadFromSource rồi nhấn Enter.
  6. Trong ngăn Chi tiết , bấm chuột phải vào ForceVBALoadFromSource , rồi bấm Sửa đổi .
  7. Trong hộp Dữ liệu giá trị, nhập 1, sau đó bấm OK .
  8. Thoát khỏi Registry Editor.


Điều kiện tiên quyết

Để áp dụng bản cập nhật này, bạn phải cài đặt Microsoft Excel 2016.

Thông tin khởi động lại

Bạn có thể phải khởi động lại máy tính sau khi cài đặt bản cập nhật này.

Lưu ý: hướng dẫn trên đây chỉ dành cho lập trình viên hoặc những ai thường sửa mã VBA với dự án có lượng lớn mã VBA.
Vì mỗi lần mở tệp sẽ biên dịch lại mã VBA từ đầu, sẽ gây tốn kém tài nguyên nếu có dự án với mã VBA lớn.
 
Lần chỉnh sửa cuối:
bạn có thể nói thêm lỗi xảy ra thế nào không?
 
Upvote 0
Rất đơn giản là khi ứng dụng của bạn có mã VBA được biên dịch trong quá trình chỉnh sửa, bỗng dưng làm cho Office đóng đột ngột, sau đó tệp đó không thể mở lên được nữa, mỗi lần mở là Office bị đóng đột ngột. Lỗi này lỗi biên dịch của VBA, cài đặt có chức năng biên dịch lại ứng dụng có mã VBA. Hoặc sau một thời gian sử dụng tệp, bỗng dưng tệp không thể mở được nữa do quá trình đóng gói.

Trong định nghĩa biên dịch mã có nhiều tầng biên dịch. Code3, Code2, Code1, PCode, OCode, Mã máy.
Nếu mã được biên dịch trước thì mã sẽ được đọc nhanh hơn khi so với mã VBA nguyên bản. Do vậy mà khi khởi động ứng dụng cần biên dịch lại để tránh lỗi.
 
Lần chỉnh sửa cuối:
Upvote 0
Chắc là lỗi rất hy hữu vì tôi chưa từng gặp.
 
Upvote 0
@PhanTuHuong Nếu Bác đã từng viết mã qua các đoạn mã phức tạp sau thì có thể sẽ gặp lỗi này

Viết mã trong khối With lòng nhau nhiều lần
Sử dụng khai báo Type cho khối With
Nhập gõ dấu . và chạy Quick Info
Mã đang lỗi thực hiện lưu, hoặc thực thi
Khối tiền xử lý lồng nhau:
Mã:
#If a Then
     #If b Then
        #If c Then

        #Else

        #End If
    #Else

    #End If
#Else
    #If b Then

    #Else

    #End If
#End If
 
Upvote 0
Rất đơn giản là khi ứng dụng của bạn có mã VBA được biên dịch trong quá trình chỉnh sửa, bỗng dưng làm cho Office đóng đột ngột, sau đó tệp đó không thể mở lên được nữa, mỗi lần mở là Office bị đóng đột ngột. Lỗi này lỗi biên dịch của VBA, cài đặt có chức năng biên dịch lại ứng dụng có mã VBA. Hoặc sau một thời gian sử dụng tệp, bỗng dưng tệp không thể mở được nữa do quá trình đóng gói.

Trong định nghĩa biên dịch mã có nhiều tầng biên dịch. Code3, Code2, Code1, PCode, OCode, Mã máy.
Nếu mã được biên dịch trước thì mã sẽ được đọc nhanh hơn khi so với mã VBA nguyên bản. Do vậy mà khi khởi động ứng dụng cần biên dịch lại để tránh lỗi.
Tôi nghĩ lỗi này tôi gần giống lỗi trong khi dùng Add in Mx Sheet (để lấy dữ liệu từ PLC Mitsubishi sang excel). Khi load ngon lành chạy bình thường chả sao, bỗng dưng không hoạt động được và sau đó không sao active cái Add in Mx Sheet được.
Kết quả là tôi vào chỗ HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Options\ xóa toàn bộ các khóa có trong đó đi và cài lại Mx Sheet thì lại được
 
Upvote 0
Thông báo lỗi này khi mở tệp, các bạn sẽ tưởng rằng tệp bị hỏng nhưng không phải, chỉ là lỗi trình biên dịch. Thiết lập lại như bài viết sẽ tránh được lỗi.
Thường thì những ai không biết sẽ bỏ công tải lại tệp mới hoặc tạo lại từ đầu rất mất công sức.

1733381526788.png
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom