1樓:匿名使用者
這種不行,用
if <> then
elseif <> then
elseif <> then
end if
還有個方法,這些變數的值都0和1,可以作為二進位制碼合成一個變數中,然後用select:
private sub command1_click()dim b as byte
dim s1 as byte, s2 as byte, s3 as byte, s4 as byte, s5 as byte, s6 as byte
s1 = 1
s2 = 0
b = s1 * 32 or s2 * 16 or s3 * 8 or s4 * 4 or s5 * 2 or s6
select case b
case 32
msgbox "s1"
case 32 + 16
msgbox "s1+s2"
case 16
msgbox "s2"
case 32+1
msgbox "s1+36"
end select
end sub
'看的懂吧,這是簡化的,不過這些變數值必須是0或1,不然會亂套的。
也可以把變數值轉換為字串相連,再用select 也方便。
2樓:
select case 不支援多個變數,要實現這個的話一個簡單的辦法就是變成一個變數。。看你這個貌似每個s的值都是1位的數吧,那就這樣改
dim flag as integer
flag = s1 * 100000 + _
s2 * 10000 + _
s3 * 1000 + _
s4 * 100 + _
s5 * 10 + _
s6select case flag
case 100000
'表示式
case 110000
'表示式
case 101000
'表示式
case 100100
'表示式
case 100010
'表示式
case 100001
'表示式
case 111000
'表示式
case 110100
'表示式
case 110010
'表示式
case 110001
'表示式
case 111100
'表示式
case 111010
'表示式
case 111001
'表示式
case 111110
'表示式
case 111101
'表示式
end select
類似於這樣的寫法就可以了。
szqaly的方法也挺好,就是全用16、32等看著會比較亂,讓人一眼看不清條件,除錯的時候容易暈,有個簡單的辦法就是把16、32什麼得寫成 &h10,&h20 的形式,這樣能更容易認清位數…
如果變數太多(vb6的 integer 的範圍上限是 2,147,483,647,所以如果 s 的取值範圍是 0、1 的話最多可以 10 個變數,不只 0~9 的話那就只能 9 個變數了。變通的方法是看 s 的取值範圍,用更合適的 2 進位制位來表示——如果是 0~1(2^1-1) 的話每個佔一位,0~3(2^2-1)的話每個佔兩位,0~7(2^3-1)的話每個佔三位,這樣可以用 &h(十六進位制 literal) 或者 &o(八進位制 literal)來表示,會更方便。以一位、三位、四位分別舉例(可惡的vb6不支援直接寫2進位制,只能自己寫註釋了,如果沒有特別情況,儘量湊3、4的倍數比較好讀):
1位的話用 &h 和 &o 都沒區別,只是一個逢4進一位,一個逢3進一位而已,按照習慣的 &h 寫吧:
s2 * &h2 + _ ' 0x0000,0010
s3 * &h4 + _ ' 0x0000,0100
s4 * &h8 + _ ' 0x0000,1000
s5 * &h10 + _ ' 0x0001,0000
s6 * &h20 + _ ' 0x0010,0000
s7 * &h40 + _ ' 0x0100,0000
s8 * &h80 + _ ' 0x1000,0000
select case flag
case &h1 ' 0x0000,0001
' s1
case &h2 ' 0x0000,0010
' s2
case &h4 ' 0x0000,0100
' s3
case &h8 ' 0x0000,1000
' s4
case &h11 ' 0x0000,1001
' s1 and s4
case &h118 ' 0x0001,0001,1000
' s4 and s5 and s9
' ...
end select
3位的話用 &o(八進位制)比較好:
s5 * &o10000 + ...
select case flag
' s1 = 1
' s1 = 6
' s1 = 3 and s2 = 1
' s1 = 6 and s2 = 7 and s3 = 4
' ...
' 三位的每個數字(從右往左)就對應每一個s的數值(十進位制)
end select
4位的話用 &h(十六進位制)比較好:
s5 * &h10000 + ...
select case flag
' s1 = 1
' s1 = 6
' s1 = 3 and s2 = 10
' s1 = 12 and s2 = 7 and s3 = 4
' ...
' 四位的每個數字(從右往左)就對應每一個s的數值(十六進位制,轉10進位制也很容易吧?)
end select
vb中如何使用select case語句
3樓:匿名使用者
語法select case 《指示變數或表示式》
《預設語句組,以上語句組都因情形不符合實際時執行》
end select
其中,表述情形的關鍵字,有is和to,多個情形要並列在一起時,使用逗號(英文)連線。當省略case else語句並且語句組都因情形不符合實際時,語句的執行,會直接到達end select。如果在執行語句的時候,有需要跳過沒有必要再執行的語句而直接結束select case的情況時,請使用exit select。
注意在「《指示變數或表示式》」不是true或false關鍵字時,邏輯運算(and、or、not)會沒有意義。因為邏輯運算的結果是true或false,不是表述具體情況的值或者範圍。需要比較大小時,請使用is、to關鍵字。
以上為了給出一個能夠通用的語法而如此表述。
在「《指示變數或表示式》」是true或false關鍵字時,is、to關鍵字沒有意義。
以上兩種情況,切記不要搞混。
巢狀各語句組中也可以寫入完整的select case語句,像for迴圈中巢狀一個二級迴圈一樣。別誤會,select case不是迴圈語句,是條件選擇語句,與if...elseif...
elseif...end if類似。
基本用法
private sub main()
select case inputbox("請輸入你希望的天氣,從晴天、多雲、陰天、陣雨、小雨、小雪、冰雹中選一個填入。", "請輸入你希望的天氣", "晴天")
使用關鍵字is
private sub main()
select case day(now)
case is <= 10
msgbox "目前是本月上旬!"
case is > 20
msgbox "目前是本月下旬!"
case else
msgbox "目前是本月中旬!"
end select
end sub
《以上**在vb6.0測試通過》
使用關鍵字to
private sub main()
select case weekday(now)
case 1, 7
msgbox "今天是週末!"
case 2 to 6
msgbox "今天不是週末!"
end select
end sub
《以上**在vb6.0測試通過》
關鍵字is和to可以根據需要,在同一條情形中一起使用,例如
case is<=5,8 to 10,is>20
不過要注意的是,to表示的區間,是閉區間,不適用於開區間(或半閉半開區間)。如果一定要用select case來確定數值在哪個區間內,可以這麼做:
private sub main()
on error goto err
dim num as single
num = inputbox("請輸入!")
select case num
case is <= 1
msgbox "這個數不大於1"
case is < 3
msgbox "這個數在1和3之間的開區間內"
case is < 5
msgbox "這個數在3和5之間的半閉半開區間內"
case is <= 7
msgbox "這個數在5和7之間的閉區間內"
case is > 7
msgbox "這個數大於7"
end select
exit sub
err:
msgbox "這個不是可比較的數字"
end sub
此時,各case不能隨便對換順序。雖然這個可以達到我們想要的效果,卻因為不夠嚴謹,讓我憂心忡忡。那麼什麼是最嚴謹的呢?請看高階用法。
高階用法
語法(這裡只是為了更好的理解,稍稍變一下表述,不改變實意。)
select case true
case 《邏輯運算表示式1>
《語句組1>
case 《邏輯運算表示式2>
《語句組2>
....
case 《邏輯運算表示式n>
《語句組n>
case else
《預設語句組,當以上任何邏輯運算都為false時執行》
end select
在此語法下,is、to關鍵字沒有意義,is的值為true(is是變數嗎?這個問題真的好讓人回味啊)
只要邏輯運算表示式的運算結果為true,就執行該case下的語句組。那麼,上面的例子就這麼改。
private sub main()
on error goto err
dim num as single
num = inputbox("請輸入!")
select case true
case num >= 5 and num <= 7
msgbox "這個數在5和7之間的閉區間內"
case num < 3 and num > 1
msgbox "這個數在1和3之間的開區間內"
case num > 7
msgbox "這個數大於7"
case num < 5 and num >= 3
msgbox "這個數在3和5之間的半閉半開區間內"
end select
exit sub
err:
msgbox "這個不是可比較的數字"
end sub
可以看到,順序被我隨意變動了,測試也通過了。那麼,愛琢磨的我,又發現一個問題:select case true可以改成select case false嗎?
答案是,可以。這裡就不作示例了,只給出語法
select case false
case 《邏輯運算表示式1>
《語句組1>
case 《邏輯運算表示式2>
《語句組2>
....
case 《邏輯運算表示式n>
《語句組n>
case else
《預設語句組,當以上任何邏輯運算都為true時執行》
end select
只要邏輯運算表示式的運算結果為false,就執行該case下的語句組。
vb中for迴圈step的問題VB中FOR迴圈STEP的問題
如果沒有其他條件使迴圈變數的值發生變化,當第一次迴圈條件滿足時,step為0將造成死迴圈,當第一次迴圈條件不滿足時,step為0不迴圈 先看這幾句執行時的作用 1 s 0,給s設初值0 2 for i 1 to 5,第一次執行這一句時,對i設初值1,以後每次執行這一句時都判斷i的值是否介於初值和終值...
VB中的小問題,VB中的一個小問題
left函式是返回指定數目的從字串的左邊算起的字元,a答案結果為 microsoft mid函式從字串中返回指定數目的字元,在預設狀況下返回從指定位置開始到字串結束的字元。因此答案是b。mid string,start,length 就是從字串string的第start個字元開始取length個字串...
vb中exitfor什麼意思vb中for必須和exitfor成對使用嗎
exit for是退出for迴圈用的,你用for next迴圈的時候,達到某種條件需要退出,就加上內exit for就可以退出for迴圈了。容例程 for i 1 to 100 j j 1 if j 50 then exit for end if next dim i as integer for ...