2012-11-16 143 views
0

我有以下代码:输出错误

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



    ElseIf UCase(Left(Dn, 3)) = "LM$" Then 
      Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 3.5 

ElseIf UCase(Left(Dn, 2)) = "LM" Then 
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) + 3.5 
      Else 
      Dn.Offset(, 1) = Mid(Dn, 3, 3) + 0.35 
      End If 
      End If 


    ElseIf UCase(Left(Dn, 2)) = "L$" Then 
      Dn.Offset(, 1) = Val(Mid(Dn, 3, 2)) + 2 

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



    ElseIf UCase(Left(Dn, 3)) = "LO " Then 
      Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 2 

    ElseIf UCase(Left(Dn, 5)) Like "L###S" Then 
     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) + 2 
     Else 
      Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2 
     End If 
     End If 
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    'ElseIf UCase(Left(Dn, 1)) = "L" Then 
      'Dn.Offset(, 1) = Val(Mid(Dn, 2, 3)) + 2 
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
      'ElseIf IsNumeric(Mid(Dn, 2, 1)) And IsNumeric(Mid(Dn, 3, 1)) Then 
      'Dn.Offset(, 1) = IIf(Mid(Dn, 3, 1) = 0, Val(Mid(Dn, 2, 2)) + 2, Val(Mid(Dn, 2, 2)) + 0.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 UCase(Left(Dn, 5)) Like "L###S" Then 
     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) + 2 
     Else 
      Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2 
     End If 
     End If 


    ElseIf UCase(Left(Dn, 4)) Like "L##S" Then 
     If 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 
     End If 
     End If 


     If IsNumeric(Mid(Dn, 2, 1)) Then 
      Dn.Offset(, 1) = Val(Mid(Dn, 2, 2)) + 0.2 
    End If 

     'ElseIf UCase(Left(Dn, 4)) Like "L###" Then 
      ' Dn.Offset(, 1) = Val(Mid(Dn, 2, 3)) + 0.2 
    ' End If 

我从代码的电流输出如下:

*L111 --> 111.2 
*L100 --> 100.2 
*L100S --> 100.2 
*L10S --> 12.2 
*L12S --> 12.2 

所需的输出是如下:

*L111 --> 111.2 
*L100 --> 100.2 
*L100S --> 100 
*L10S --> 12 
*L12S --> 12.2 

我不知道我在做什么错,任何帮助将非常多赞赏。

预先感谢您。

+0

您没有提供所有的代码。您的输出样本与您提供的代码不匹配。 –

+0

@DanielCook,谢谢你的回复,对不完整的信息道歉。代码很长很复杂,因此我只粘贴了L变量。我希望这可以澄清问题。任何帮助和指导将非常感激。谢谢 – user1574185

回答

2

它看起来是最后的If/then将0.2加到你所有的5个输入中,它应该:IsNumeric(Mid(Dn, 2, 1))对你所有的输入都是正确的。

使用Select Case语句而不是所有的Ifs和​​ElseIfs,此代码可能会有益于(可读性,调试等)。

+0

非常感谢您的回复,是的您的权利,最后如果声明是骑过其他条件,所以我用类似的功能来解决我的问题。再次感谢您的时间和帮助。 – user1574185

+0

如果你想感谢他 - 你应该接受这个答案。 –

0

上面的谢谢你的建议和帮助,但我设法解决我自己的问题。

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

    ElseIf UCase(Left(Dn, 3)) = "LM$" Then 
      Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 3.5 

ElseIf UCase(Left(Dn, 2)) = "LM" Then 
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) + 3.5 
      Else 
      Dn.Offset(, 1) = Mid(Dn, 3, 3) + 0.35 
      End If 
      End If 


    ElseIf UCase(Left(Dn, 2)) = "L$" Then 
      Dn.Offset(, 1) = Val(Mid(Dn, 3, 2)) + 2 

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

    ElseIf UCase(Left(Dn, 3)) = "LO " Then 
      Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 2 

    ElseIf UCase(Left(Dn, 5)) Like "L###S" Then 
     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) + 2 
     Else 
      Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2 

     End If 
     End If 

    ElseIf UCase(Left(Dn, 4)) Like "L##S" Then 
     If 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 
     End If 


    ElseIf UCase(Left(Dn, 4)) Like "L###" Then 
     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) + 0.2 
     Else 
      Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2 

     End If 
     End If 

    ElseIf UCase(Left(Dn, 3)) Like "L##" Then 
     If 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) + 0.2 
     Else 
      Dn.Offset(, 1) = Mid(Dn, 2, 2) + 0.2 
     End If 
     End If 

    End If