作者yimean (温柔杀手)
看板Office
标题[算表] VBA计算後溢位问题
时间Tue Jul 7 10:49:36 2020
软体: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
烦请高手协助,感恩。
--------我是Code--------
Sub Non_circule_material_calculate(length As Single, width As Single, buffer
As Single, MP As Single, Density As Single, Thick As Single)
Dim R_L, R_W As Single 'R_L stands for remainder of length
Dim PsPS As Integer 'PsPP stands for pice per sheet
Dim PrPS As Variant 'PrPS stands for price per sheet
Dim PrPP As Single 'PrPP stands for price per pice
Dim CoilP As Variant 'Coil price
PrPS = Round(1220 * 2440 * MP * Density * Thick / 10 ^ 6, 2)
R_L = (1220 Mod (length + buffer)) * (length + buffer)
R_W = (1220 Mod (width + buffer)) * (width + buffer)
If R_L < R_W Then
PsPP = (1220 \ (length + buffer)) * (2440 \ (width + buffer))
PrPP = PrPS / PsPS
Else
'除却第一种状况只有等於与不等於的问题。如果是等於,那麽不论是哪一种排
法其实都没有问题。
PsPP = (2440 \ (length + buffer)) * (1220 \ (width + buffer))
PrPP = PrPS / PsPS
End If
CoilP = Round((length + buffer) * (width + buffer) * MP * Density * Thick
/ 10 ^ 6, 2)
[D10] = CoilP
[D11] = PrPP
End Sub
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.33.116.8 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1594090178.A.A66.html
※ 编辑: yimean (114.33.116.8 台湾), 07/07/2020 10:50:36
1F:→ soyoso: 如无合适方式的话,可改为1 / 10 ^ 6 * 1220 * 2440 * MP 07/07 11:09
2F:→ soyoso: * Density * Thick 07/07 11:09
3F:→ soyoso: 或是 MP * Density * Thick * 1220 * 2440 / 10 ^ 6 07/07 11:16
4F:→ soyoso: 若要以原本1220 * 2440 * MP..的话,1220改为csng(1220) 07/07 11:19
5F:→ yimean: @s大Csng(1220)的解决方法是可行的,感谢。可是,为什麽 07/07 14:46
6F:→ yimean: 只有包一个1220就可以呢?烦请拨冗解惑,感谢。 07/07 14:47
7F:→ soyoso: 出现溢位的错误视窗,按说明有写 07/07 14:59
8F:→ soyoso: 转型为整数integer所以溢位 07/07 15:00
9F:→ soyoso: 当然以clng也是可以,目的就是不要被转型 07/07 15:08
10F:→ yimean: @s大,我看了说明,说明也是只包一个,我的疑问是,为什麽 07/07 15:38
11F:→ yimean: 不是包整个算式。这跟内建函数的概念不太依样呢。 07/07 15:39
12F:→ soyoso: 说明网页内搜寻运算子,*运算子 07/07 16:03
13F:→ soyoso: 注解有写result 的资料类型通常是运算式的相同的最精确运 07/07 16:03
14F:→ soyoso: 算式。 精确的顺序,从最低到最精确,是Byte、integer(整 07/07 16:03
15F:→ soyoso: 数)、 Long、Single、Currency、Double.... 07/07 16:03
16F:→ soyoso: 1220*2440都是做为整数integer来运算,套到上述注解来看相 07/07 16:03
17F:→ soyoso: 同最精确就会是以integer,那就溢位了,那改以1220*MP来看 07/07 16:03
18F:→ soyoso: ,变数MP是single,最精确是single,所以不会溢位,这就是 07/07 16:03
19F:→ soyoso: 为什麽只要改一个就好,要clng、csng加在1220或2440都可以 07/07 16:03
20F:→ yimean: @s原来如此,感恩您。 07/08 11:20