VBA中If条件语句出现"Type mismatch"错误的原因排查
VBA代码"Type mismatch"错误原因分析
错误核心原因
第16行的If条件触发类型不匹配,主要有两个关键点:
- 当单元格
AT&rowCycle格式为日期时,.Value返回日期类型(Variant/Date),直接和空字符串""比较会导致类型不兼容,触发错误。 "#Н/Д"是Excel俄文版的#N/A错误值,本质是错误值类型(Variant/Error),并非字符串,用.Value和字符串直接比较会引发类型不匹配。
修正方案
调整条件判断逻辑,先处理错误值和空值,再统一转换为字符串比较:
' 修改第16行的If条件为: If ThisWorkbook.Sheets("Sales").Range("AT" & rowCycle).NumberFormat = "dd-mm-yyy" _ And Not IsError(ThisWorkbook.Sheets("Sales").Range("AT" & rowCycle).Value) _ And Not IsEmpty(ThisWorkbook.Sheets("Sales").Range("AT" & rowCycle).Value) _ And CStr(ThisWorkbook.Sheets("Sales").Range("AT" & rowCycle).Value) <> "#Н/Д" Then
同理,第二个循环中第35行的If条件也需要做相同修改,避免触发同样的错误。
额外优化建议
- 提前将源工作表赋值给变量,减少重复调用,提升代码效率:
后续用Dim srcSheet As Worksheet Set srcSheet = ThisWorkbook.Sheets("Sales")srcSheet.Range(...)替代重复的ThisWorkbook.Sheets("Sales").Range(...) - 给循环变量指定明确类型,比如
Dim rowCycle As Long, secondCycle As Long,避免变体类型带来的潜在问题。
内容的提问来源于stack exchange,提问作者fierna
相关产品推荐
相关产品推荐

