2012-06-28 2 views
1

간단한 검증 코드로 시작된 것은 내 눈에 아주 역설적 인 것으로 변환 된 것입니다.케이스 선택 케이스가 0보다 작은 경우

다음 코드는 "Good work!" 때 내가 입력에서 InputBox 팝업

Dim myvar As String 

myvar = InputBox("input a positive number, please") 

If IsNumeric(myvar) Then 
    myvar = CDbl(myvar) 
    Select Case myvar 
    Case Is < 0 
     MsgBox "I need a positive number" 
    Exit Sub 
    Case Is > 0 
     MsgBox "Good work!" 
     [MyField] = myvar 
     RunCommand acCmdSaveRecord 
     Me.Requery 
    Exit Sub 
    Case Else 
     MsgBox "You entered '" & myvars & "'. I don't know what to do about" 
    End Select 
Else 
    MsgBox "A Number, please" 
End If 

에서 음수 일 경우이는에서 InputBox를 확인하는 가장 좋은 방법은 정말?

+1

0도 –

답변

3

myvarString이므로 CDbl(myvar)은 암시 적으로 문자열로 다시 변환됩니다. Select Case에 대한 임시 숫자 변수를 만듭니다.

+0

도 잊지 말고 각 사례 다음에 'Exit Sub'가 필요하지 않으며, 그 밖의 경우에는 'myvar'대신'myvars'가 있습니다. 'Option Explicit'을 사용하면 오류 유형 – SeanC

+0

을 추적 할 수 있습니다. 하지만 실제로 하나의 입력 상자에 두 개의 변수가 필요합니까? 더 좋은 방법이 없을까요? –

+1

@Hristo : 만약 당신이 그것을 피하고 싶다면, 같은 줄에 넣으십시오 :'Select Case CDbl (myvar)'. – Lou

0

다른 답변에 동의합니다. (선언 된 두 번째 변수를주의)이 코드를 다시 쓰기에 대한 생각 : 당신이 제로를 차지 거기에 이중으로 별도의 변수를 선언하여 문제를 해결하는 것입니다

Dim myvar as String 
Dim myDbl as Double 

myvar = inputBox ("Input a positive number, please") 

if isnumeric(myvar) then 
    myDbl = cDbl(myvar) 
else 
    msgbox "Enter a number please" 
    exit sub 
end if 


if mydbl <=0 then 
    msgbox "I need a positive number" 
else  'if mydbl > 0 then 
    MsgBox "Good work!" 
    [MyField] = myvar 
    RunCommand acCmdSaveRecord 
    Me.Requery 
end if 

합니다. case 대신 if 문을 사용하는 것이 좋습니다. 하지만 이제는 두 가지 변수에 대해 생각해보십시오. 첫 번째 인쇄를 다시 실행한다면

debug.print "MyVar is a string containing: " & myvar 

debug.print cstr(cdbl(myvar)*2)  
'This forces myvar into a double(a number-type) to do math on it and then print it out 

그러나, 당신은 myVar에 여전히 문자열 및 문자열처럼 사용할 수 있습니다 볼 것입니다. VBA에서 다른 언어와 달리 변수는 선언 한 것일뿐입니다. 다른 것들처럼 사용하고 싶다면, 필요한 타입의 또 다른 변수를 선언해야합니다.

TL; DR 다른 용기로 생각하십시오. 문자열은 원 상자이고 복식은 정사각형 상자입니다. 그들은 비슷한 물건을 담을 수 있지만 컨테이너의 기능은 모양에 따라 제한됩니다. VBA에서는 원을 사각형으로 만들 수 없으므로 두 번째 컨테이너 전체를 만들고 물건을 옮겨야합니다.

관련 문제