Excel VBA使用Evaluate时出现Type mismatch错误求助
问题分析与解决方案
错误原因
触发类型不匹配的核心问题是:Evaluate执行工作表函数后返回的是Variant数组(哪怕结果是单个数值,也会被包装成数组),直接和数值0做比较时,VBA无法完成类型匹配,因此抛出错误13。
另外,这段代码完全没必要调用工作表的MOD函数——VBA本身自带Mod运算符,直接用行号变量i计算更高效,也能避免这类类型问题。
修复方案
方案1:修正现有Evaluate写法
如果一定要保留工作表函数的调用,需要把返回的数组转换成单个数值:
Sub copcol() Dim nmr As Variant Sheets(1).Activate lrow = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To lrow ' 取数组的第一个元素,转换成数值 nmr = Evaluate("=MOD(ROW(A" & i & "),10)")(1, 1) If nmr = 0 Then ' Do something End If Next i ' 原代码缺少该语句,会导致语法错误 End Sub
方案2:改用VBA原生Mod运算符(推荐)
直接用行号变量i计算,完全避免Evaluate的类型问题,代码更简洁高效:
Sub copcol() Sheets(1).Activate lrow = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To lrow ' 直接用VBA原生Mod运算符计算行号除以10的余数 If i Mod 10 = 0 Then ' Do something End If Next i End Sub
额外注意
你原代码还缺少Next i和End Sub语句,这会导致语法错误,记得补充完整。
内容的提问来源于stack exchange,提问作者nicktrent
相关产品推荐
相关产品推荐

