[VBA ] inputbox 與運算

看板Visual_Basic作者 (needs no nick name)時間11年前 (2014/03/29 17:47), 編輯推噓3(308)
留言11則, 4人參與, 最新討論串1/1
新手遇到一個想不通的問題@@ Sub q1() Dim a, b, c As Integer a = InputBox("") b = InputBox("") c = a + b MsgBox c End Sub 輸入a=1 b=2 msgbox 顯示出的卻是12 而不是3 我的問題是:為什麼已經宣告a,b 是整數型態 VBA卻仍然把他當成字串?? 符號 + 變成字串連結子而不是運算子? 我知道的解決的方法是改成 c= val(a) + val(b) 但是我另外又想到一個問題 Sub q2() Dim a, b, c, d, e As Integer a = InputBox("") b = InputBox("") c = a d = b e = c + d MsgBox e End Sub 這樣的結果會和上面一樣是12 可是只要改變宣告變數的順序 Dim a, b, e, c, d As Integer msgbox就會顯示3 這其中的差異到底在哪裡呢?? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.39.188.93 ※ 文章網址: http://www.ptt.cc/bbs/Visual_Basic/M.1396086478.A.99A.html

03/29 18:45, , 1F
你碰到bug了。沒事用一用val()ㄅ
03/29 18:45, 1F

03/29 18:55, , 2F
a = Val(InputBox(""))你寫法不是直接出錯就是變成你看到的
03/29 18:55, 2F

03/29 18:59, , 3F
宣告之後 最好還是用Cstr Val 之類指定變數型態比較穩
03/29 18:59, 3F

03/29 19:19, , 4F
不是bug,是你沒有完整宣告
03/29 19:19, 4F

03/29 19:20, , 5F
Dim a (As Variant), b (As Variant), c As Integer
03/29 19:20, 5F

03/29 19:20, , 6F
你只有c宣告成整數,忽略的話預設是宣告成 Variant
03/29 19:20, 6F

03/29 19:21, , 7F
正確的宣告是dim a as long, b as long, c as String
03/29 19:21, 7F

03/29 19:21, , 8F
附帶一提,用Long會比Integer 好
03/29 19:21, 8F

03/29 19:39, , 9F
謝謝各位大大
03/29 19:39, 9F

03/31 15:18, , 10F
OUCH 忘了DIM AS這個大陷阱了 >_<
03/31 15:18, 10F

04/01 10:40, , 11F
原來是這樣 一直沒弄清楚
04/01 10:40, 11F
文章代碼(AID): #1JDfREcQ (Visual_Basic)
文章代碼(AID): #1JDfREcQ (Visual_Basic)