Lỗi không khớp loại VBA (Ví dụ) | Làm thế nào để khắc phục lỗi thời gian chạy 13?

Nhập lỗi không khớp hoặc chúng tôi cũng có thể gọi nó là Mã lỗi 13, nó xảy ra khi chúng tôi gán giá trị cho một biến không thuộc kiểu dữ liệu của nó, ví dụ: nếu chúng tôi cung cấp giá trị thập phân hoặc giá trị dài cho một biến kiểu dữ liệu số nguyên, chúng tôi sẽ gặp lỗi Không khớp Loại này khi chúng tôi chạy mã được hiển thị dưới dạng Mã lỗi 13.

Lỗi không khớp loại VBA là gì?

Lỗi không khớp loại VBA trong excel là một loại “Lỗi thời gian chạy” và nó là lỗi số 13 trong danh mục này.

Để bắt đầu quá trình học trong VBA và đối với người mới bắt đầu, thật khó để tìm ra lỗi do mã VBA gây ra. Hãy nhớ VBA không phải là tạo ra một lỗi mà nó chỉ làm nổi bật những sai lầm của chúng ta trong khi viết mã.

Chúng tôi thường khai báo các biến và chúng tôi gán các kiểu dữ liệu cho nó. Khi chúng ta gán giá trị cho các biến đó, chúng ta cần nhớ loại dữ liệu mà nó có thể chứa, nếu giá trị được gán không đúng với kiểu dữ liệu, chúng ta sẽ nhận được “Lỗi thời gian chạy 13: Loại không khớp”.

Làm thế nào để khắc phục lỗi thời gian chạy không khớp loại VBA 13?

Hãy xem một số ví dụ để hiểu Lỗi không khớp loại VBA này.

Bạn có thể tải xuống Mẫu Excel không phù hợp kiểu VBA này tại đây - Mẫu Excel không khớp kiểu VBA

Loại VBA Không khớp - Ví dụ # 1

Để có ví dụ, hãy xem mã VBA bên dưới.

Mã:

 Sub Type_MisMatch_Example1 () Dim k As Byte k = "Hiii" MsgBox k End Sub 

Tôi đã khai báo biến “k” là Byte.

Điều này có nghĩa là biến “k” có thể giữ các giá trị từ 0 đến 255. Nhưng ở dòng tiếp theo, tôi đã gán giá trị cho biến “k” là “Hiii”.

Rõ ràng là kiểu dữ liệu không thể giữ giá trị của một văn bản, vì vậy ở đây có Lỗi không khớp kiểu.

Loại VBA Không khớp - Ví dụ # 2

Bây giờ hãy xem thêm một ví dụ với kiểu dữ liệu khác. Nhìn vào đoạn mã dưới đây.

Mã:

 Sub Type_MisMatch_Example2 () Dim x As Boolean x = 4556 MsgBox x End Sub 

Chúng tôi đã khai báo biến “x” là Boolean.

Boolean là một kiểu dữ liệu có thể giữ giá trị TRUE hoặc FALSE.

Trong đoạn mã trên, chúng tôi đã gán giá trị là 4556, giá trị này không theo giá trị kiểu dữ liệu là TRUE hoặc FALSE.

Khi chúng tôi chạy mã này, bạn sẽ gặp lỗi không khớp về loại, nhưng hãy xem điều gì sẽ xảy ra khi chúng tôi chạy mã này.

Bạn phải tự hỏi tại sao điều này không đưa ra lỗi thời gian chạy 13 của lỗi kiểu không khớp.

Lý do cho điều này là excel coi tất cả các số là TRUE ngoại trừ số 0. Giá trị 0 sẽ được coi là FALSE. Vì vậy, đó là lý do tại sao chúng tôi nhận được kết quả là TRUE thay vì lỗi.

Bây giờ hãy xem tôi sẽ gán một giá trị số với văn bản.

Mã:

 Sub Type_MisMatch_Example2 () Dim x As Boolean x = "4556a" MsgBox x End Sub 

Điều này chắc chắn sẽ gây ra Lỗi thời gian chạy 13: Loại không khớp.

Loại VBA Không khớp - Ví dụ # 3

Bây giờ, hãy xem đoạn mã dưới đây cho ví dụ này.

Mã:

 Sub Type_MisMatch_Example4 () Dim x As Integer Dim y As String x = 45 y = "Jan 2019" MsgBox x + y End Sub 

Biến “x” là kiểu dữ liệu số nguyên và “y” là kiểu dữ liệu chuỗi.

X = 45 và y = tháng 1 năm 2019.

Trong hộp tin nhắn, tôi đã thêm x + y.

Nhưng đây không phải là mã hoàn hảo vì chúng ta không thể thêm số với văn bản chuỗi. Chúng ta sẽ gặp phải Lỗi thời gian chạy 13.

Loại VBA Không khớp - Ví dụ # 4

Trường hợp đặc biệt

Có những tình huống mà excel tha thứ cho dữ liệu sai được gán cho kiểu dữ liệu biến. Để biết ví dụ, hãy xem đoạn mã dưới đây.

Mã:

 Sub Type_MisMatch_Example3 () Dim x As Long Dim y As Long x = 58,85 y = "85" MsgBox x & vbNewLine & y End Sub 

Hai biến được khai báo là “x” & “y”.

Đối với biến này, kiểu dữ liệu được chỉ định là "Dài".

Kiểu dữ liệu dài chỉ chấp nhận số nguyên, không chấp nhận giá trị thập phân.

Vì vậy, nhận thức chung là nhận được lỗi thời gian chạy 13 của lỗi kiểu không khớp.

Nhưng hãy xem điều gì sẽ xảy ra khi chúng ta chạy đoạn mã này.

Chà !!! Chúng tôi nhận các giá trị là 59 & 85.

Điều này là do VBA sẽ chuyển đổi giá trị thập phân 58,85 thành giá trị số nguyên gần nhất và mặc dù các số được đặt trong dấu ngoặc kép nhưng nó chỉ chuyển đổi thành giá trị số nguyên.


$config[zx-auto] not found$config[zx-overlay] not found