Excel 运行时错误-类型不匹配

Excel 运行时错误-类型不匹配,excel,vba,Excel,Vba,我有一个宏,它向特定字符串添加特定值。然而,我目前得到一个运行时错误,我不知道为什么 Case "L" If UCase(Left(Dn, 3)) = "L/M" Then Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 35 ElseIf UCase(Left(Dn, 2)) = "LM" Then 'Dn.Offset(, 1) = Val(Mid(Dn, 3, 3)) + 3.5 If IsNu

我有一个宏,它向特定字符串添加特定值。然而,我目前得到一个运行时错误,我不知道为什么

Case "L"

    If UCase(Left(Dn, 3)) = "L/M" Then
        Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 35

    ElseIf UCase(Left(Dn, 2)) = "LM" Then
        'Dn.Offset(, 1) = Val(Mid(Dn, 3, 3)) + 3.5
        If IsNumeric(Mid(Dn, 3, 1)) And IsNumeric(Mid(Dn, 4, 1)) Then
            If Mid(Dn, 4, 1) = "0" Then
                Dn.Offset(, 1) = Mid(Dn, 3, 2) + 3.5
            Else
                Dn.Offset(, 1) = Mid(Dn, 3, 2) + 0.35
            End If
        End If

        If IsNumeric(Mid(Dn, 4, 1)) And IsNumeric(Mid(Dn, 5, 1)) Then
            If Mid(Dn, 5, 1) = "0" Then
                Dn.Offset(, 1) = Mid(Dn, 3, 3) + 35
            Else
                Dn.Offset(, 1) = Mid(Dn, 3, 3) + 0.35
            End If
        End If

    ElseIf UCase(Left(Dn, 3)) = "LOW" Then
        Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 20
    ElseIf UCase(Left(Dn, 3)) = "LO-" Then
        Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 20
    ElseIf UCase(Left(Dn, 6)) = "LO MID" Then
        Dn.Offset(, 1) = Val(Mid(Dn, 7, 3)) + 35
    ElseIf UCase(Left(Dn, 2)) = "L+" Then
        Dn.Offset(, 1) = Num
    ElseIf UCase(Left(Dn, 3)) = "LO " Then
        Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 20


        'ElseIf UCase(Left(Dn, 1)) = "L" Then
        'Dn.Offset(, 1) = Val(Mid(Dn, 2, 3)) + 2
        'ElseIf IsNumeric(Mid(Dn, 2, 1)) Then
        'Dn.Offset(, 1) = IIf(IsNumeric(Mid(Dn, 2, 1) + Mid(Dn, 3, 1)), Val(Mid(Dn, 2, 3)) + 2, Val(Mid(Dn, 2, 1)) + 0.2)

    ElseIf IsNumeric(Mid(Dn, 2, 1)) And IsNumeric(Mid(Dn, 3, 1)) Then
        If Mid(Dn, 3, 1) = "0" Then
            Dn.Offset(, 1) = Mid(Dn, 2, 2) + 2
        Else
            Dn.Offset(, 1) = Mid(Dn, 2, 2) + 0.2
        End If
    Else
        Dn.Offset(, 1) = Val(Mid(Dn, 2, 3)) + 20
    End If
    If IsNumeric(Mid(Dn, 3, 1)) And IsNumeric(Mid(Dn, 4, 1)) Then
        If Mid(Dn, 4, 1) = "0" Then
            Dn.Offset(, 1) = Mid(Dn, 2, 3) + 20
        Else
            Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2
        End If

    End If
输入数据

*vh105 --> 105.9
*h107 --> 107.8
*l107 --> 107.2
*lm106 --> 106.35
*lm106  
*l107   
*44 
如果您能帮助解决这个问题,我们将不胜感激

隔离
Val(Mid(Dn,4,2))
甚至
Mid(Dn,4,2)
,因为我认为Val没有从
Mid
函数中获得合适的数字字符串

在第2行和第3行之间使用此选项:

Debug.Print Mid(Dn,4,2)
调试.打印Val(Mid(Dn,4,2))


让我们知道您在即时窗口(如果不存在,请转到查看>即时窗口)

使用步骤(调试>步骤)进行调试,并查看它实际停止工作的代码行。同时打开“本地人观察”窗口(查看>本地人观察),查看所有值是否符合您的期望非常感谢您的回答,但第三行代码有问题。另外,我的本地watch变量没有显示任何内容。我有相同的代码用于案例M,同样的代码用于“MH”和M变量,因此在运行这些变量时不会出现任何类型错误。locals watch将显示本地元素的值或对象分配。因此,我希望Dn显示在那里,因为它在我看来是一个
string
类型的局部变量。我还想知道,从您的输入数据集来看,代码实际上是如何在第三行代码中结束的(如果
If
语句应该为false,那么代码将跳到
ElseIf
您应该包括他应该在即时窗口中键入的内容,因为他可能不知道。窗口中没有要键入的内容,代码中的debug.print将在即时窗口中打印…doh,没有足够注意。谢谢