使用Evaluate函数时出现Type Mismatch错误的技术求助
VBA代码"Type mismatch"错误修复方案
错误根源分析
- 公式语法完全错位:Evaluate中的公式写成了
LEN)(",括号顺序颠倒,且整个公式的括号、引号配对错误,导致无法解析计算,触发类型不匹配。 - 变量未声明/未定义:
sr、lr变量未声明,lr甚至未赋值就直接用于SumIfs函数,引发变量类型错误。 - 工作表对象未初始化:
ws1未指定具体工作表,若未提前赋值会导致Evaluate调用失败。 - 通配符使用错误:条件
*CS55**B*多了一个星号,应为*CS55*B*,否则匹配逻辑混乱。
修正后的代码
Sub PaintCS55() Dim lrNew As Long, n1 As Double, n2 As Double, sr As Long, n As Long Dim ws As Worksheet Dim targetStr As String ' 指定当前工作表,避免跨表引用错误 Set ws = ActiveSheet lrNew = ws.Range("A" & ws.Rows.Count).End(xlUp).Row sr = 2 Dim lr As Long lr = lrNew ' 补全原代码中未定义的lr变量 targetStr = ws.Cells(lrNew, "K").Value ' 直接用VBA原生函数计算B的数量,规避Evaluate的语法问题 If InStr(targetStr, "CS55") > 0 Then n = Len(targetStr) - Len(Replace(targetStr, "B", "")) End If ' 合并重复条件,用Select Case简化多分支逻辑 If InStr(targetStr, "CS55") > 0 And InStr(targetStr, "B") > 0 Then n1 = WorksheetFunction.SumIfs(ws.Range("C" & sr & ":C" & lr), _ ws.Range("K" & sr & ":K" & lr), "*CS55*B*") Select Case n Case 1 n2 = n1 * 0.000666 * 7.48 Case 2 n2 = n1 * 0.000666 * 7.48 * 2 Case 3 n2 = n1 * 0.000666 * 7.48 * 3 End Select End If lrNew = lrNew + 1 ' 用With语句简化单元格赋值代码 With ws.Cells(lrNew, "A") .Value = ws.Cells(lr, "A").Value .Offset(0, 1).Value = "." .Offset(0, 2).Value = n2 .Offset(0, 3).Value = "F62655" .Offset(0, 8).Value = "Purchased" .Offset(0, 10).Value = "CS55 Black" End With ' 修正数值判断逻辑:原代码用Like会误判含0的非零数值 If ws.Cells(lrNew, "C").Value = 0 Then ws.Rows(lrNew).Delete End If End Sub
关键修复点说明
- 替换Evaluate计算逻辑:直接用VBA的
Len和Replace函数统计B的数量,避免公式语法错误,运行更稳定。 - 补全变量声明与初始化:所有变量均显式声明,定义
lr并赋值,指定工作表对象,避免隐式引用错误。 - 优化条件与分支逻辑:用
InStr替代Like做包含判断更高效,合并重复条件,用Select Case处理不同B数量的计算,代码更简洁。 - 修正数值判断逻辑:原代码用
Like "*0*"会误判如0.1这类含0的非零数值,改为直接判断等于0,逻辑准确。
内容的提问来源于stack exchange,提问作者Zac
相关产品推荐
相关产品推荐

