Ngay cả người dùng đã có nhiều kinh nghiệm với mã VBA trong Excel đôi khi vẫn có sai sót, lỗi vẫn có thể xảy ra bình thường, bài viết dưới đây Taimienphi.vn sẽ hướng dẫn bạn tất tần tật cách sửa lỗi VBA trong Excel.
VBA trong Excel cho phép người dùng tự động hóa nhiệm vụ với các thao tác lặp đi lặp lại, giúp cải thiện hiệu suất công việc đáng kể. Tuy nhiên lỗi trong quá trình sử dụng VBA trong Excel là không thể tránh khỏi. Bạn đọc cùng tham khảo bài viết Tất tần tật cách sửa lỗi VBA trong Excel dưới đây của Taimienphi.vn để tìm hiểu các cách sửa lỗi VBA nhé.
1. Các loại lỗi VBA trong Excel
Trước khi đi sâu tìm hiểu các cách và các bước sửa lỗi VBA, trước hết bạn đọc cùng Taimienphi.vn tìm hiểu một số loại lỗi VBA phổ biến trong Excel.
Có 4 loại lỗi Excel VBA, bao gồm:
- Lỗi cú pháp (Syntax Error).
- Lỗi biên dịch (Compile Error).
- Lỗi Run-time Error.
- Lỗi Logical Error.
1.1 Lỗi cú pháp (Syntax Error)
Đúng như tên gọi của nó, lỗi cú pháp (Syntax Error) xảy ra khi VBA phát hiện lỗi hoặc cú pháp sai trong mã.
Ví dụ, chẳng hạn nếu bạn quên một phần câu lệnh / cú pháp cần thiết, sau đó trên màn hình sẽ hiển thị lỗi biên dịch (Compile Error).
Trong đoạn mã dưới đây, sau khi nhấn Enter sau dòng lệnh thứ 2, trên màn hình sẽ hiển thị thông báo lỗi biên dịch. Nguyên nhân gây ra lỗi là do lệnh IF phải có lệnh Then đi cùng, tuy nhiên trong đoạn mã này lệnh Then bị thiếu.
Lưu ý: Khi nhập mã trong Excel VBA, nó sẽ kiểm tra từng câu lệnh một ngay sau khi chúng ta nhấn Enter. Nếu VBA phát hiện lệnh hoặc phần nào đó trong cú pháp bị thiếu, ngay lập tức nó sẽ hiển thị thông báo trên màn hình để chúng ta có thể biết được nguyên nhân là do đâu.
Để đảm bảo lỗi cú pháp hiển thị mỗi khi có lỗi hoặc sai sót nào xảy ra, cần đảm bảo bạn đã kích hoạt Autosyntax. Để làm được điều này, click chọn Tools, sau đó click chọn Options. Trong hộp thoại Options, đảm bảo tùy chọn Auto Syntax Check đã được kích hoạt.
Trường hợp nếu tùy chọn Auto Syntax Check bị vô hiệu hóa, bị tắt, VBA vẫn sẽ hiển thị dòng có cú pháp lỗi nhưng không hiển thị hộp thoại thông báo lỗi.
1.2 Lỗi biên dịch (Compile Error)
Lỗi biên dịch (Compile error) xảy ra khi thiếu thành phần cần thiết nào đó để chạy mã.
Cho ví dụ khi chạy đoạn mã dưới đây trên màn hình sẽ hiển thị thông báo lỗi. Nguyên nhân là sử dụng lệnh IF Then mà không có lệnh End If.
Lỗi cú pháp (syntax error) cũng là một dạng lỗi biên dịch. Lỗi cú pháp xảy ra ngay sau khi chúng ta nhấn Enter và VBA phát hiện thiếu một phần hoặc cú pháp nào đó. Lỗi biên dịch cũng xảy ra khi VBA không tìm thấy thành phần nào đó khi nhập mã, nhưng xảy ra khi mã được biên dịch hoặc thực thi.
VBA kiểm tra từng dòng lệnh một khi chúng ta đang nhập mã là đánh dấu lỗi cú pháp ngay sau khi phát hiện có một dòng nào đó không đúng và khi chúng ta nhấn Enter. Ngược lại lỗi biên dịch chỉ được xác định khi VBA phân tích toàn bộ đoạn mã.
Dưới đây là một số trường hợp phổ biến hay xảy ra lỗi biên dịch:
- Sử dụng lệnh IF mà không có lệnh End IF.
- Sử dụng lệnh For với Next.
- Sử dụng lệnh Select mà không có lệnh End Select.
- Không khai báo biến (chỉ hoạt động khi tùy chọn Option Explicit được kích hoạt).
- Gọi một hàm không tồn tại (hoặc sai tham số).
Lưu ý: Khi thêm tùy chọn Option Explicit, chúng ta sẽ được yêu cầu khai báo tất cả các biến trước khi chạy mã. Nếu có biến chưa được khai báo, VBA sẽ hiển thị thông báo lỗi.
1.3 Lỗi Run-time Error
Lỗi run-time xảy ra khi mã đang chạy.
Ví dụ nếu chạy đoạn mã được sử dụng để mở workbook Excel nhưng workbook không khả dụng (đã bị xóa hoặc được đổi tên), mã sẽ trả về thông báo lỗi run-time.
Khi lỗi run-time xảy ra, mã sẽ dừng chạy và trên màn hình sẽ hiển thị hộp thoại thông báo lỗi giải thích nguyên nhân gây lỗi là do đâu.
Bằng cách click chọn nút Debug để làm nổi bật phần mã gây ra lỗi.
Sau khi sửa lỗi, bạn có thể click chọn nút Run trên thanh công cụ hoặc nhấn phím F5 để tiếp tục chạy mã. Hoặc có thể click chọn nút End để thoát khỏi mã.
Lưu ý quan trọng: Trong trường hợp nếu click chọn nút End trên hộp thoại, nó sẽ dừng lại ở đoạn mã bị lỗi. Tất cả các dòng mã trước đó sẽ được thực thi.
1.4 Lỗi Logical Error
Lỗi logic không làm cho mã dừng lại, nhưng có thể trả về các kết quả sai. Đây cũng là loại lỗi khó khắc phục nhất. Trình biên dịch không đánh dấu các lỗi này và chúng ta phải thực hiện theo cách thủ công.
Có một số cách để khắc phục lỗi logical trong Excel:
- Chèn Message Box vào các vị trí trong đó mã và các giá trị / dữ liệu được làm nổi bật.
- Thay vì chạy cả đoạn mã cùng một lúc, chúng ta chạy từng dòng mã một. Để làm được điều này, click chọn vị trí bất kỳ trong mã và nhấn phím F8 để thực thi từng dòng mã một. Điều này cho phép chúng ta có thể dễ dàng xác định các lỗi trong từng dòng mã.
2. Tất tần tật cách sửa lỗi VBA trong Excel
Cách 1: Sử dụng Debug để tìm lỗi biên dịch / lỗi cú pháp
Giải pháp lý tưởng là thực hiện biên dịch mã trước khi chạy. Để biên dịch mã, click chọn tùy chọn Debug trên thanh công cụ, sau đó click chọn Compile VBAProject.
Khi biên dịch VBA project, nó sẽ đi qua các mã và xác định các lỗi (nếu có).
Trong trường hợp nếu phát hiện thấy lỗi, VBA sẽ hiển thị hộp thoại thông báo lỗi, sau khi đã sửa lỗi chúng ta sẽ phải chạy lại trình biên dịch lần nữa để tìm các lỗi khác (nếu có).
Nếu mã không có lỗi, tùy chọn Compile VBAProject sẽ chuyển sang màu xám.
Lưu ý: Biên dịch mã chỉ phát hiện được các lỗi cú pháp và lỗi biên dịch, không thể phát hiện các lỗi run-time.
Cách 2: Cấu hình các cài đặt lỗi (lỗi Handled và Unhandled)
Ngoài ra trước khi bắt đầu thực thi các mã, chúng ta nên kiểm tra cài đặt Excel VBA.
Truy cập thanh công cụ VBA, sau đó click chọn Tools =>Options.
Trên hộp thoại Options, click chọn tab General, đảm bảo tùy chọn Break on Unhandled Errors trong Error Trapping đã được chọn.
- Tùy chọn Break on All Errors: dừng thực thi mã trên tất cả các loại lỗi, ngay cả khi bạn đã áp dụng các kỹ thuật để xử lý các lỗi này.
- Tùy chọn Break in Class Module: Dừng thực thi mã trên tất cả các lỗi chưa được xử lý (Unhandled), đồng thời nếu sử dụng các đối tượng như Userforms, nó cũng sẽ phá vỡ các đối tượng này và đánh dấu chính xác dòng gây ra lỗi.
- Tùy chọn Break on Unhandled Errors: Chỉ dừng mã đối với các lỗi không được xử lý. Đây là cài đặt mặc định để đảm bảo các lỗi chưa được xử lý chưa được hiển thị trên thông báo. Nếu sử dụng các đối tượng như Userforms, tùy chọn này không đánh dấu dòng gây ra lỗi trong đối tượng mà chỉ đánh dấu dòng tham chiếu đến đối tượng đó.
Lưu ý: Nếu làm việc với các đối tượng như Userforms, bạn có thể thay đổi cài đặt này thành Break on Class Modules. Ngoài ra bạn cũng có thể sử dụng tùy chọn thứ 2, nó sẽ hiển thị dòng cụ thể trong đối tượng là nguyên nhân gây lỗi.
3. Xử lý lỗi VBA bằng các lệnh On Error
Xem chi tiết cách xử lý lỗi VBA bằng cách lệnh Error tại đây
4. Tìm hiểu thuộc tính và phương thức Err Object (đối tượng Err)
Xem bài viết tìm hiểu thuộc tính và phương thức đối tượng Err Object tại đây.
5. Tổng kết
Dưới đây là tổng hợp một số cách để xử lý lỗi VBA trong Excel:
1. Sử dụng lệnh On Error Go [Label] ở đầu mã để đảm bảo có bất lỳ lỗi nào xảy ra cũng được xử lý.
2. Chỉ sử dụng lệnh On Error Resume Next khi biết chắc chắn các lỗi có thể xảy ra. Trong trường hợp nếu sử dụng lệnh với các lỗi phát sinh, lệnh sẽ bỏ qua lỗi và mã tiếp tục chạy. Ngoài ra chúng ta có thể sử dụng kết hợp lệnh On Error Resume Next với Err.Raise nếu muốn bỏ qua loại lỗi cụ thể.
3. Khi sử dụng trình xử lý lỗi, cần đảm bảo sử dụng Exit Sub trước khi xử lý. Điều này để đảm bảo trình xử lý mã lỗi chỉ được thực thi khi có lỗi xảy ra, nếu không nó sẽ luôn được thực thi.
4. Sử dụng nhiều trình xử lý để bẫy các loại lỗi khác nhau.
Bài viết trên đây Taimienphi.vn vừa hướng dẫn bạn tất tần tật cách sửa lỗi VBA trong Excel. Nếu có bất kỳ thắc mắc hoặc câu hỏi nào cần giải đáp, bạn đọc có thể để lại ý kiến của mình trong phần bình luận bên dưới bài viết nhé.
https://thuthuat.taimienphi.vn/tat-tan-tat-cach-sua-loi-vba-trong-excel-45759n.aspx
Ngoài ra, bạn có thể tìm hiểu về cách mở VBA trong Excel được hướng dẫn cụ thể trên Taimienphi, cách mở VBA trong Excel cũng khá đơn giản, bạn có thể thực hiện dễ dàng để phục vụ cho các công việc lập trình của mình.