[算表] VBA計算後溢位問題

作者: yimean (溫柔殺手)   2020-07-07 10:49:36
軟體:Excel
版本:Office 365
各位版上的神人早上好。
我撰寫了一個簡單的用料計算程式。
執行的時候會卡在
PrPS = Round(1220 * 2440 * MP * Density * Thick / 10 ^ 6, 2)
錯誤資訊是"溢位"
我有嘗試把變數宣告為Variant或著甚至不宣告都出現這個問題
在儲存格中打公式不會有問題,但是在VBA中就會有。
在這應用情境中
MP=170, Density=2.7, Thick=2, length=133.5, width=133.5, buffer=2
煩請高手協助,感恩。
作者: soyoso (我是耀宗)   2020-07-07 11:09:00
如無合適方式的話,可改為1 / 10 ^ 6 * 1220 * 2440 * MP* Density * Thick或是 MP * Density * Thick * 1220 * 2440 / 10 ^ 6若要以原本1220 * 2440 * MP..的話,1220改為csng(1220)
作者: yimean (溫柔殺手)   2020-07-07 14:46:00
@s大Csng(1220)的解決方法是可行的,感謝。可是,為什麼只有包一個1220就可以呢?煩請撥冗解惑,感謝。
作者: soyoso (我是耀宗)   2020-07-07 14:59:00
出現溢位的錯誤視窗,按說明有寫轉型為整數integer所以溢位當然以clng也是可以,目的就是不要被轉型
作者: yimean (溫柔殺手)   2020-07-07 15:38:00
@s大,我看了說明,說明也是只包一個,我的疑問是,為什麼不是包整個算式。這跟內建函數的概念不太依樣呢。
作者: soyoso (我是耀宗)   2020-07-07 16:03:00
說明網頁內搜尋運算子,*運算子註解有寫result 的資料類型通常是運算式的相同的最精確運算式。 精確的順序,從最低到最精確,是Byte、integer(整數)、 Long、Single、Currency、Double....1220*2440都是做為整數integer來運算,套到上述註解來看相同最精確就會是以integer,那就溢位了,那改以1220*MP來看,變數MP是single,最精確是single,所以不會溢位,這就是為什麼只要改一個就好,要clng、csng加在1220或2440都可以
作者: yimean (溫柔殺手)   2020-07-08 11:20:00
@s原來如此,感恩您。

Links booklink

Contact Us: admin [ a t ] ucptt.com