2014-10-06 5 views
0

B, KB, MB, GB 및 TB와 같은 다양한 형식의 데이터 집합이 있습니다. 단위를 제거하고 GB로 변환하는 코드를 작성했습니다. 내 문제는 마지막 섹션 'b to kb'는 형식 불일치 오류가 발생한다는 것입니다. 내가 왜 각 전환에 동일한 코드를 적용했는지 이해할 수 없습니까? 미리 감사드립니다. 나는이 두 가지 문제를 참조VBA의 형식 불일치 오류

Sub RemoveUnits() 
Dim r As Range 
Dim x As Long 
For Each r In ActiveSheet.UsedRange 
w = r.Value 

'GB 
    If InStr(w, "gb") > 0 Then 
     r = Left$(r, Len(r) - 2) 
     Debug.Print (r.Value) 
    'No conversion required 
'TB 
    ElseIf InStr(w, "tb") > 0 Then 
     r = Left$(r, Len(r) - 2) 
     r = r * 1024 
     Debug.Print (r.Value) 
    'Convert tb to gb 
'MB 
    ElseIf InStr(w, "mb") > 0 Then 
     r = Left$(r, Len(r) - 2) 
     r = (1/1024) * r 
     Debug.Print (r.Value) 
'Convert mb to gb 
'KB 
    ElseIf InStr(w, "kb") > 0 Then 
     r = Left$(r, Len(r) - 2) 
     r = (1/1048576) * r 
     Debug.Print (r.Value) 
'B to KB 
    ElseIf InStr(w, "b") > 0 Then 
     r = Left$(r, Len(r) - 1) 
     r = (1/1024) * r 
     debung.Print (r.Value) 




    End If 
Next r 
End Sub 

답변

0

:

여기 내 코드입니다.

  1. 범위로는 을 설정했습니다.
  2. 숫자 값에 문자열 값을 곱하려고합니다. 문자열을 숫자 값으로 변환 한 다음 필요한 작업을 수행하십시오.

예를 들어

r = Left$(r, Len(r) - 2) 
r = r * 1024 

는 ...이

r = Val(Trim(r)) * 1024 

이 유사 r = (1/1024) * rr = (1/1024) * Val(Trim(r))에 등을 변경

참고하십시오 : 그 r 저장을 숫자 값을 가정하고 문자열로.

0

원인 : 마지막 ElseIf 대신 밀교 debung.Print의 일반적인 Debug.Print을 사용하십시오. 보통 코드 강조 표시는 좋은 친구입니다. 또한, 디버그를 돕는 코드가 처음부터 예외를 발생 시킨다는 사실을 보충하는 meta-irony 포인트가 있습니다. :-)

제안 : 당신이 Excel.Range 개체를 전달하면서Left$는 첫 번째 매개 변수로 String을 기대하고있다. 가끔은 ...

시도 괜찮되지 않습니다 (모든 코드에 대해이 문제를 해결) :

Sub RemoveUnits() 
     '... Local declarations' 
     Dim w As String 

     For Each r In ActiveSheet.UsedRange 
       Let w = CStr(r.Value) 

       ' ... The other cases' 

       ElseIf InStr(w, "b") > 0 Then 
         Let w = Left$(w, Len(w) - 1) 
         Let r.Value = (1/1024) * CDbl(w) 
         Debug.Print r.Value 
       End If 
     Next r 
End Sub 

제안 부분 그것이 계산 String을 위해 사용하는 차이, Siddharth Rout의 응답과 유사하다 변수는 중간이 아니라 Range입니다.

+0

'debung.Print'을 제외하고, 나는 당신의 대답이 내 것과 어떻게 다른지 잘 모르겠습니다. –

+0

@SiddharthRout Hi Siddharth. 나는 당신이 내가 당신과 비슷한 점을 공유하는 답을 썼다는 사실을 개인적으로 생각하지 않기를 바랍니다. 또한 귀하의 의견이 귀하의 답변을 훔쳐 갔음을 의미하지는 않기를 바랍니다. :-) –

+0

개인적으로 받아 들였 으면 이미 내렸을 것입니다.) 아니요, 당신이 대답을 훔쳤다 고 말하는 것이 아닙니다. 그 이유는 비슷한 대답을 게시하는 이유가 보이지 않기 때문입니다 ... –