2012-11-06 65 views
-1

我有一个宏,它将特定的值添加到特定的字符串。然而,我目前正在得到一个运行时错误,我不明白为什么?运行时错误 - 类型不匹配

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 

这个问题的任何帮助将是非常可以理解的。

+1

使用该步骤进入(Debug> Step Into)来调试并查看代码实际停止工作的哪一行。同时打开当地人的观看窗口(视图>当地人观看),看看是否所有的价值都是根据您的期望 –

+0

非常感谢您的答复,但第三行代码有问题。另外,我的本地监视变量没有显示任何内容。对于“情况M”,我有相同的代码,“MH”和M变量的代码相同,所以在运行时不会出现错误类型错误。 – user1574185

+0

当地人观看将显示本地元素的值或对象分配。所以我期望Dn被显示在那里,因为它看起来像是一个'string'类型的局部变量。 –

回答

0

隔离Val(Mid(Dn,4,2))甚至Mid(Dn,4,2)因为我觉得瓦尔犯规得到一个合适的数字串与来自Mid功能工作

使用此线2和3之间:

Debug.Print Mid(Dn,4,2)
Debug.Print Val(Mid(Dn,4,2))

让我们知道你在立即窗口中得到什么(如果不存在,请转到查看>立即窗口)

+0

你应该包括他应该输入的内容因为他可能不知道 –

+0

没有什么可输入的窗口,代码中的debug.print会打印在即时窗口中... –

+0

doh,没有足够的重视。谢谢 –

相关问题