You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

关键修复点说明

  1. 替换Evaluate计算逻辑:直接用VBA的Len和Replace函数统计B的数量,避免公式语法错误,运行更稳定。
  2. 补全变量声明与初始化:所有变量均显式声明,定义lr并赋值,指定工作表对象,避免隐式引用错误。
  3. 优化条件与分支逻辑:用InStr替代Like做包含判断更高效,合并重复条件,用Select Case处理不同B数量的计算,代码更简洁。
  4. 修正数值判断逻辑:原代码用Like "*0*"会误判如0.1这类含0的非零数值,改为直接判断等于0,逻辑准确。

内容的提问来源于stack exchange,提问作者Zac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:35:30