2012-11-06 5 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 

이 문제에 어떤 도움이 아주 많이 감사 할 것입니다. 나는 발은 적절한 수치 문자열이 Mid 함수에서 작업 할 수 나던 생각하는

+1

(Debug> Step Into) 단계를 사용하여 디버깅하고 코드의 어느 행이 실제로 작동을 멈추는 지 확인하십시오. 또한 지역별보기 창 (보기> 지역별보기)을 열어 모든 값이 예상대로인지 확인하십시오. –

+0

응답 해 주셔서 감사하지만 3 행 코드에 문제가 있습니다. 또한 지역 시계 변수에 아무 것도 표시되지 않습니다. 나는 "MH"와 M 변수에 대해 같은 코드를 가진 Case M과 동일한 코드를 가지고 있으며,이를 실행할 때 실수를하지 않는다. – user1574185

+0

지역 사용자는 로컬 요소에 대한 값 또는 개체 할당을 표시합니다. 그래서 나는 그것이'string' 타입의 지역 변수이기 때문에 Dn이 거기에 보여지기를 기대할 것입니다. –

답변

0

Val(Mid(Dn,4,2)) 심지어 Mid(Dn,4,2) 분리

이 두 라인 사이 3 사용 :

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

직접 실행 창에서 얻은 정보를 알려주십시오 (제공되지 않는 경우보기> 직접 실행 창으로 이동)

+0

) 입력해야 할 내용을 포함시켜야합니다 즉각적인 창에서 그가 모를 수도 있습니다. –

+0

창에 입력 할 것이 없으므로 코드의 debug.print가 바로 창에 인쇄됩니다 ... –

+0

doh,주의를 충분히 기울이지 않았습니다. 감사합니다. –