2017-11-10 2 views
-1

이것이 작동하지 않는다고 가정 할만한 이유가있는 것은 무엇이든 찾을 수 없습니다. 무엇을 상관없이 항상 if 문 내부의 코드를 평가합니다.<> ... 내가 무엇이 누락되었는지

() 안에 모든 것을 넣으려고했지만()로 각 문을 분리하려고했습니다. 상관없이 항상 if 문 안에 코드를 실행합니다. 내가 뭘 놓치고 있니?

' Update by Adam W. Schneider 11/10/2017 
If strDrawingSize <> "T" Or strDrawingSize <> "Y" Or strDrawingSize <> "Z" Or strDrawingSize <> "M" Or strDrawingSize <> "P" Or strDrawingSize <> "S" Or strDrawingSize <> "N" Or strDrawingSize <> "W" Or strDrawingSize <> "X" Or strDrawingSize <> "R" Or strDrawingSize <> "O" Then 

    ' Update by Adam Schneider 08/24/2017 
    cboRefDrawingSize.Text = cboDrawingSize.Text 

End If 

나는 추한 if 문을 알고 있는데, case 문과 함께 부정 논리를 사용하려고 시도했지만 그 중 하나도 작동하지 않았습니다.

+2

나는 모든'Or's가'And'이어야한다고 생각합니다. 모든 문자열은 적어도 모든 문자열과 동일하지 않습니다. – mypetlion

+3

논리를 크게 읽습니다. "** 무언가가 **"T "** 또는 ** 같은 것이 **"Y "가 아닌 경우 ..."- 거짓이 될 수 있습니까? – Blorgbeard

+1

'strDrawingSize <> "T"또는 strDrawingSize <> "Y"...'항상 그런 것들 중 적어도 하나와 같지 않을 것입니다. AND 논리가 필요합니다. –

답변

2

, 당신은 strDrawingSize 원하는 문자 중 하나가 아닌 경우 확인하려면 :

클리너 방법은 Select Case가 사용하는 것입니다. 그런 경우는 -1 인 경우, 다음 비교 원하는 문자에 같이 IndexOf 메서드를 사용

If "TYZMPSNWXRO".IndexOf(strDrawingSize) = -1 Then 
    cboRefDrawingSize.Text = cboDrawingSize.Text 
End If 

바이올린 : Live Demo

이 작동하는 방법이다 : 본질적으로 문자열의 모음입니다 Char 값의 경우 IndexOf 메서드는 컬렉션 내의 지정된 값의 인덱스를 반환하고 값이 없으면 -1을 반환합니다.

1

다른 사람들이 말했듯이 AND 대신 OR을 사용하기 때문에 코드가 항상 실행됩니다. 내가 알고있는 것처럼

Select Case strDrawingSize 
    Case "T", "Y", "Z", "M", "P", "S", "N", "W", "X", "R", "O" 
    Case Else 
      ' Update by Adam Schneider 08/24/2017 
      cboRefDrawingSize.Text = cboDrawingSize.Text 
End Select 
+0

이것은 잘 작동한다는 점에서 괜찮은 해결책이지만 더 깨끗한 해결책에 대한 나의 예를 살펴 본다. – David