Public Sub test()
Dim d As Date
d = "10/1/2015"
t = "10/2/2015"
MsgBox Asc(d) & "," & Asc(t) & "," & d < t
End Sub
顯示結果為什么只有False?不應該是“50,49,True”嗎?
uj5u.com熱心網友回復:
basic語言型別的自由性,給程式員養成了一堆壞習慣。不同型別的資料你扔給他,然后要他天經地義的按照你想要的結果給你?你咋不給他想要的呢?
一切不確定都是你造成的。
試試
MsgBox Asc(CStr(d)) & "," & Asc(CStr(t)) & "," & CStr(d < t)
uj5u.com熱心網友回復:
我懂你得意思,我想了解一下,產生我給出的那個結果的原因是?
uj5u.com熱心網友回復:
樓主需要掌握“運算子優先級”問題。
按你寫的運算式: Asc(d) & "," & Asc(t) & "," & d < t
這其中的“運算子”只有 & 和 < 。
由于 & 的優先級高于 < ,因此先進行前面的“字串連接”,最后進行“比較”。
由于你的 變數t 是“未定義”的,那么就只能算它是 Variant型別的變數;
t 在賦值之后,其“子型別”是String(雖然看起來是“日期”,但它首先是“字串”!)。
因此,最后執行的是“兩個字串的大小比較”,運算結果當然只有 True 或 False兩種結果!
針對你這段“具體代碼”,前面 & 的結果是: "50,49,2015/10/1"
(注:變數d 轉換成“字串”,結果可能會受“系統設定”影響,也許多數情況下是 yyyy/m/d格式)
最后進行的“比較”是: "50,49,2015/10/1" < "10/2/2015"
這個結果當然是 False !!!
你想要你“預想的結果”,那么,必須要用括號改變其運算順序才行!
要這樣寫: Asc(d) & "," & Asc(t) & "," & (d < t)
這樣就會是“你想要的結果”了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/42061.html
標籤:VBA
上一篇:VB.Net登錄表單涉涉及
下一篇:自寫桌面
