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,没有足够注意。谢谢