2017-06-04 24 views
0

我真的很困惑這個。已經搜索過網絡,但沒有找到與我的具體情況有關的任何答案。我有以下代碼:VBA Select Case無選擇地穿過

Dim CE_res As Integer 


For Index = 1 To 7 

Status = "" 
CE_res = CInt(Worksheets("werkblad").Range("CEres" & Index).Value) 

If CE_res = 0 Then 
' Everything ok 
    Status = "Pass" 

Else 

    Select Case CE_res 

     Case CE_res < -1500 
      Status = "Invalid kV Value" 

     Case CE_res < -999 
      Status = "No kV Value" 

     Case CE_res < -399 
      Status = "kV too high" 

     Case CE_res = 0 
      Status = "kV too low" 

     Case CE_res > 500 
      Status = "Invalid mAs Value" 

     Case CE_res > 49 
      Status = "mAs Value missing" 

     Case CE_res > 9 And CE_res < 50 
      Status = "Adapt Target" 

     Case CE_res > 200 
      Status = "Adapt Filter" 

     Case Else 
      Status = "No Selection" 

    End Select 

End If 

CE_res設置爲50.但是,總是選擇Case Else。聲明CE_res爲整數,轉換工作表(「werkblad」)。範圍(「CEres」&索引)。值爲整數,只是爲了確保。 但是,它似乎沒有正確執行Select Case。試用了其他值,甚至將CE_res> 49的情況​​改爲CE_res =「50」,但這也不起作用。

現在,我不知道什麼可能是錯的。

+0

你不把變量名放在Case語句中。 '案例0'或'案例<-1500'。 –

回答

2

您沒有使用正確的語法case語句

Dim CE_res As Integer 


For Index = 1 To 7 

Status = "" 
CE_res = CInt(Worksheets("werkblad").Range("CEres" & Index).Value) 

If CE_res = 0 Then 
' Everything ok 
    Status = "Pass" 

Else 

    Select Case CE_res 

     Case < -1500 
      Status = "Invalid kV Value" 

     Case < -999 
      Status = "No kV Value" 

     Case < -399 
      Status = "kV too high" 

     Case 0 ' or possibly Case < 0 ???? 
      Status = "kV too low" 

     Case > 500 
      Status = "Invalid mAs Value" 

     Case > 200 
      Status = "Adapt Filter" 

     Case > 49 
      Status = "mAs Value missing" 

     Case > 9 
      Status = "Adapt Target" 

     Case Else 
      Status = "No Selection" 

    End Select 

End If 

注意,我不得不搬到> 200之前> 49,否則的值,例如,230會匹配> 49,因此從來沒有達到過你的> 200


你有它的方式,聲明Case CE_res < -1500將測試如果CE_res< -1500。如果是,則返回一個True,然後將其與案例陳述的對象(即CE_res)進行比較,如果它匹配(它不會)將執行Select語句的該段。

+0

你可能有點累,你有'如果CE_res = 0',並且在'Select Case'中:'Case 0',並且在'Status =「kV太低」(和PO一樣)之後。他需要決定'CE_res = 0'結果是「Pass」還是「kV太低」 –

+0

@ShaiRado是啊 - 我想知道這個 - 你認爲它應該是'<0'嗎? – YowE3K

+0

我不知道,只有PO知道他想在這裏實現什麼 –

0

正如其他成員所提到的,由於您使用了<> = comparitors,您需要確保您正確地訂購它們,否則它們將無法按預期工作。有了你使用的非常具體的價值,你可能會更好地使用TO和更具體的值。

Select Case 
    Case -1000 TO -1500 
    'Do This 
    Case -400 TO -999 
    'Do That 
    Case -1 TO -399 
    'Do Something Else 
End Select 

如果你這樣做,不知道什麼是什麼,它更容易閱讀和操作順序無關緊要。

您也不需要將CE_res添加到每個Case語句,因爲您已經在Select Case CE-res行上指定了該變量。正確的語法是

Select Case CE_res 
    Case <-1500 
    Status = "Invalid kV Value" 
End Select