Tại sao cùng FIle,cùng code VBA mà ở máy này chạy đúng,máy kia chạy sai. (1 người xem)

  • Thread starter Thread starter DMQ
  • Ngày gửi Ngày gửi

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

DMQ

Thành viên dốt
Tham gia
21/3/12
Bài viết
741
Được thích
62
Giới tính
Nam
Em có vấn đề hỏi anh chị, em có file có code VBA nhờ các anh chị làm ở máy nhà, thì chạy OK, nhưng đem file đó đưa lên máy Cty thì chạy sai. Không biết có ai bị vậy không??
 
]Gemini]
Lỗi code VBA chạy bình thường ở máy nhà nhưng bị sai hoặc lỗi (Error) khi mang lên máy công ty là một vấn đề rất phổ biến. Hiện tượng này thường do sự khác biệt về môi trường hệ thống, phiên bản phần mềm hoặc cài đặt bảo mật giữa hai máy.
Dưới đây là các nguyên nhân phổ biến nhất và cách xử lý nhanh:

1. Thiếu thư viện liên kết (Missing References)​

  • Nguyên nhân: Code ở nhà của bạn có sử dụng một số thư viện bổ sung (vídụ: Microsoft Outlook, Microsoft Scripting Runtime, Solver...) mà máy công ty chưa kích hoạt hoặc có phiên bản khác.
  • Cách khắc phục:
    1. Tại máy công ty, mở file Excel, nhấn Alt + F11 để vào cửa sổ VBA.
    2. Chọn Tools > References.
    3. Tìm xem có dòng nào hiển thị chữ "MISSING: ..." hay không. Nếu có, hãy bỏ tích chọn nó, tìm đúng thư viện đó ở phiên bản hiện tại của máy công ty và tích chọn lại.

2. Khác biệt phiên bản Office (32-bit và 64-bit)​

  • Nguyên nhân: Nếu code của bạn có sử dụng các hàm API hệ thống (khai báo bằng từ khóa Declare Sub...), nó sẽ bị lỗi nếu máy nhà dùng Office 32-bit còn máy công ty dùng Office 64-bit (hoặc ngược lại).
  • Cách khắc phục:Cập nhật lại đoạn khai báo API bằng cách sử dụng thuộc tính định hướng PtrSafe để tương thích với bản 64-bit.
    • Ví dụ: Chuyển Declare Sub ... thành Declare PtrSafe Sub ... (và đổi kiểu dữ liệu biến liên quan thành LongPtr).

3. Định dạng Ngày tháng (Regional Date Settings)​

  • Nguyên nhân: Máy nhà cấu hình ngày tháng kiểu Ngày/Tháng/Năm (DD/MM/YYYY), còn máy công ty cấu hình kiểu Tháng/Ngày/Năm (MM/DD/YYYY). Khi VBA xử lý chuỗi ngày tháng sẽ sinh ra kết quả sai hoặc lỗi.
  • Cách khắc phục:
    • Sử dụng hàm DateSerial(Year, Month, Day) trong VBA thay vì truyền chuỗi dạng "05/09/2026".
    • Hoặc kiểm tra lại Regional Settings trong Control Panel của cả 2 máy để đồng bộ.

4. Cài đặt bảo mật Macro ở Công ty bị chặn​

  • Nguyên nhân: Chính sách bảo mật (IT Policy) của công ty chặn không cho chạy Macro hoặc chặn các kết nối dữ liệu từ bên ngoài (nếu code có lấy dữ liệu từ Web/SQL).
  • Cách khắc phục:
    1. Vào File > Options > Trust Center > Trust Center Settings.
    2. Tại mục Macro Settings, chọn Disable VBA macros with notification (để Excel hiển thị nút "Enable Content" khi mở file).
    3. Tại mục Trusted Locations, thêm thư mục chứa file của bạn vào danh sách tin cậy.

5. Khác biệt về Tên Sheet hoặc Đường dẫn File (Path)​

  • Nguyên nhân: Nếu code VBA cố định (Hardcode) một đường dẫn thư mục (với tên User máy nhà) hoặc gọi tên một Sheet/File cụ thể mà máy công ty không có hoặc viết khác ký tự (Hoa/Thường/Dấu tiếng Việt).
  • Cách khắc phục: Sử dụng các đường dẫn động như ThisWorkbook.Path thay vì viết cố định C:\Users\Admin\Desktop\...

Để em có thể bắt bệnh chính xác nhất cho anh/chị, hãy chụp ảnh màn hình dòng code bị báo lỗi màu vàng (nếu có) hoặc gửi đoạn code VBA đang bị chạy sai lên đây kèm theo thông tin:
  • Máy báo lỗi gì (mã lỗi, thông báo lỗi)?
  • Nó chạy ra kết quả sai ở đoạn nào?
 
Thủ phạm là mục 3 anh @SA_DQ ,đúng là code có dính tới ngày tháng, anh có code nào convert ngày tháng chuẩn không ạ???
Bài đã được tự động gộp:

code chạy không lỗi, nhưng kết quả sai anh @SA_DQ .
 
Thủ phạm là mục 3; là code có dính tới ngày tháng, . . . . anh có code nào convert ngày tháng chuẩn không ạ???
Bạn thử chuyển từ dạng ngày-tháng đang dùng sang yyyy/MM/DD
Xem thử 2 hệ thống có chấp nhận chuyện kiểu dữ liệu mới này không!
E rằng viết code để chuyển sẽ không thực tế cho lắm
Chúc vui!
 
  • Yêu thích
Reactions: DMQ
Cái Cty gì mà Tạp Nham, cả Cty mấy chục cái máy, anh nào thích định dạng nào thì gõ, có cái thì dd/mm/yy, cái thì mm/dd/yy, lộn tùng phèo,bởi vậy có vụ cãi nhau mắc cười, anh thì nói tao nhập ngày 4 tháng 8 năm 2025,anh kia thì nói tao thấy mày nhập ngày 8 tháng 4 năm 2025 mà (đối với máy ảnh). :D:D:D:D:D
 
Hỏi: File Excel xài máy nhà có định dạng ngày-tháng là dd/mm/yyyy; Ở cơ quan thường ấn định xài kiểu mm/dd/yyyy
thì phải làm sao hở Gemini

Nếu không thể can thiệp vào cài đặt hệ thống (Control Panel) của máy cơ quan, bạn vẫn có thể giải quyết triệt để bằng 2 cách an toàn dưới đây. Cả hai cách này đều giúp file chạy mượt mà trên cả máy nhà và máy cơ quan mà không sợ bị đảo lộn ngày tháng.

Cách 1: Sử dụng Custom Format "Khóa vùng" (Khuyên dùng)​

Bạn dùng tính năng Định dạng ô (Format Cells) kết hợp mã ngôn ngữ. Cách này ép Excel hiển thị đúng định dạng dd/mm/yyyy trên mọi máy, bất kể máy đó đang dùng chuẩn mm/dd/yyyy hay yyyy/mm/dd, mà không làm mất thuộc tính Date (vẫn tính toán, lọc, sắp xếp bình thường).
  1. Quét chọn toàn bộ cột chứa ngày tháng.
  2. Nhấn tổ hợp phím Ctrl + 1 (hoặc chuột phải chọn Format Cells).
  3. Chọn thẻ Number > Chọn danh mục Custom.
  4. Tại ô Type, bạn copy và dán chính xác dòng mã sau:
    [$-vi-VN]dd/mm/yyyy hoặc [$-42A]dd/mm/yyyy
  5. Nhấn OK.
Mẹo: Mã [$-vi-VN] (hoặc [$-42A]) giúp khóa định dạng theo chuẩn Việt Nam, buộc Excel hiển thị Ngày trước Tháng sau cho dù máy cơ quan có cài đặt kiểu Mỹ.

Cách 2: Chuyển dữ liệu thành chuỗi văn bản (Chỉ dùng khi chỉ cần xem/in ấn)​

Nếu bạn không có nhu cầu cộng/trừ ngày tháng hay lập hàm thống kê theo mốc thời gian, mà chỉ cần mang lên cơ quan để xem, báo cáo hoặc in ấn đúng định dạng yyyy/mm/dd, bạn có thể tạo một cột phụ và dùng hàm TEXT để biến ngày tháng thành chuỗi chữ cố định:
=TEXT(A2, "yyyy/mm/dd")
. . . . . . .
 
Lần chỉnh sửa cuối:
AI tư vấn là có thể nhập bằng số nguyên , ví dụ ngày 02/09/2026 thì nhập là 46267 , tương đương 46267 ngày từ 01/01/1900 , sau đó format là dd/mm/yyyy hoặc mm/dd/yyyy hoặc yyyy-mm-dd đều hiểu ^^
hoặc tách ngày , tháng , năm thành 3 cột , rồi dùng hàm date ghép lại =DATE(năm, tháng, ngày)
 
AI tư vấn là có thể nhập bằng số nguyên , ví dụ ngày 02/09/2026 thì nhập là 46267 , tương đương 46267 ngày từ 01/01/1900 , sau đó format là dd/mm/yyyy hoặc mm/dd/yyyy hoặc yyyy-mm-dd đều hiểu ^^
Thế có hỏi nó khi nhập dữ liệu 5000 học sinh với cách nhập ngày tháng năm sinh bằng giá trị số như vậy thì lấy từng con số ở đâu ra không?
 
Mục số 3 ở bài 2:
AI nói rằng "Khi VBA xử lý chuỗi ngày tháng sẽ sinh ra kết quả sai hoặc lỗi."
Tức là nó đoán ngày tháng đang ở dạng text (thế mới có hành động "xử lý chuỗi"). Chỗ này AI cho giải pháp đúng ở chỗ tách chuỗi rồi dùng hàm DateSerial.
Nếu như dữ liệu chuẩn ngày tháng thì đem đi bất kỳ đâu cũng được hiểu là ngày tháng bất kể thiết lập hệ thống kiểu gì. Excel luôn xem ngày tháng (chuẩn) là giá trị số, nếu nhập kiểu text thì bị lỗi. Ai không tin thì thử gõ 13/08/2026 trên máy thiết lập dd/mm/yy. Sau đó thay đổi thiết lập ngay trên máy đó về mm/dd/yy xem Excel có hiểu không thì biết ngay. Cũng thử như vậy, nhưng gõ 13/08/2026 dạng text.

AI ở bài 6:
Thay vì khuyên người dùng nhập liệu cho đúng chuẩn ngày tháng thì hướng dẫn đi lòng vòng, phức tạp hóa vấn đề.
Ngoài ra, giả sử 500 dòng dữ liệu, một số dòng là ngày đúng chuẩn, một số ngày là text, thì định dạng (format cell) custom hoàn toàn vô nghĩa, vô tác dụng đối với ô là text.
 

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

Back
Top Bottom