Menu

Hỗ trợ xử lý lỗi 'Type mismatch' khi gán giá trị cho Range trong VBA

Biện Dũng Dương 16/06/2026 07:16 203 lượt xem 3 trả lời

Chào mọi người,

Mình đang làm một đoạn code VBA để tự động cập nhật dữ liệu vào một vùng nhất định trên sheet. Tuy nhiên, khi chạy code thì mình gặp lỗi 'Type mismatch' (Lỗi kiểu dữ liệu không khớp) ở dòng gán giá trị cho Range.

Cụ thể, mình muốn gán một chuỗi ký tự (lấy từ một biến kiểu String) vào một ô, nhưng nó lại báo lỗi. Mình đã kiểm tra lại kiểu dữ liệu của biến và ô đích đều là văn bản (Text), nhưng vẫn bị lỗi.

Đây là đoạn code mình đang dùng:

Dim ws As Worksheet
Dim targetRange As Range
Dim dataValue As String

Set ws = ThisWorkbook.Sheets("Sheet1")
Set targetRange = ws.Range("A1")
dataValue = "Đây là dữ liệu cần gán"

targetRange.Value = dataValue ' Lỗi xảy ra ở dòng này

Mình đã thử ép kiểu dữ liệu bằng CStr(dataValue) nhưng vẫn không được. Không biết có cao nhân nào trong diễn đàn đã từng gặp lỗi này và có cách xử lý không ạ? Hay là do mình hiểu sai chỗ nào?

Mong nhận được sự giúp đỡ từ mọi người!

4

Chào bạn,

Lỗi "Type mismatch" khi gán giá trị cho Range trong VBA thường xảy ra do một vài nguyên nhân, ngay cả khi bạn nghĩ dữ liệu đã đúng kiểu.

Đôi khi, vấn đề nằm ở định dạng của ô đích chứ không hẳn là kiểu dữ liệu của ô đó là Text. Ví dụ, nếu ô đích đang được định dạng là Number nhưng bạn cố gắng gán một chuỗi ký tự có vẻ giống số, Excel có thể báo lỗi.

Bạn thử kiểm tra lại định dạng của targetRange xem sao nhé. Hoặc bạn có thể thử ép kiểu tường minh hơn một chút, ví dụ:

``vba targetRange.Value = CStr(yourStringVariable) ``

Cách này đảm bảo bạn đang cố gắng gán một chuỗi ký tự một cách rõ ràng.

Nếu vẫn chưa được, bạn có thể chia sẻ cụ thể hơn đoạn code và định dạng của ô đích không? Có thể mọi người sẽ tìm ra nguyên nhân chính xác hơn.

4

Mình cũng hay gặp lỗi "Type mismatch" này, nó thường xảy ra khi ta gán giá trị mà Excel không nhận diện đúng kiểu.

Bạn đã thử kiểm tra xem targetRange của bạn có phải là một Range hợp lệ không? Đôi khi, nếu targetRange chưa được gán hoặc gán sai (ví dụ: gán một Range rỗng), việc gán giá trị sẽ báo lỗi kiểu dữ liệu.

Bạn thử thêm dòng kiểm tra như sau vào trước dòng gán giá trị xem sao:

``vba If Not targetRange Is Nothing Then ' ... đoạn code gán giá trị của bạn ở đây ... End If `

Hoặc nếu targetRange của bạn là một ô đơn, bạn có thể thử gán trực tiếp bằng tên ô thay vì dùng biến Range` để xem có khác biệt không.

5

Mình cũng từng gặp lỗi "Type mismatch" này nhiều lần, đúng là khó chịu thật!

Ngoài việc kiểm tra định dạng ô như bạn kia nói, bạn đã thử kiểm tra xem biến yourStringVariable của bạn có chứa ký tự đặc biệt nào không? Đôi khi những ký tự không hiển thị được (như khoảng trắng thừa ở đầu/cuối chuỗi, hoặc ký tự không in được) cũng có thể gây ra lỗi này khi gán vào Range.

Bạn thử dùng hàm Trim() để loại bỏ khoảng trắng thừa xem sao:

``vba targetRange.Value = Trim(yourStringVariable) `

Nếu vẫn không được, bạn có thể post thêm phần khai báo biến và cách bạn gán giá trị cho yourStringVariable` được không?

2

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký