Các Lỗi Vba Trong Excel Và Cách Sửa
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 chúng tôi 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.
Đú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).
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.
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ã.
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ã.
- 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.
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.
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.
2. Tất tần tật cách sửa lỗi VBA trong Excel
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.
- 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
4. Tìm hiểu thuộc tính và phương thức Err Object (đối tượng Err)
5. Tổng kết
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.
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.