首页 > 解决方案 > 将变量除以给出假零结果

问题描述

我有一些代码从用户表单中获取一些输入,然后将它们输入到我的电子表格中,没什么棘手的。问题是我的 2 条数据,它们是除以 2 个其他变量的结果,无论真正的答案应该是什么,总是给出零结果。但是,如果我进入电子表格本身并使用相同的输入进行计算,它就会完全按照我的需要工作。导致我悲伤的变量是“rRate”和“pRate”。我的变量声明或其他完全有问题吗?

Dim rRate As Long
Dim sTime As Date
Dim fTime As Date
Dim tTime As Date
Dim pRate As Long
Dim Rejects As Long
Dim tProd As Long

Rejects = frmProduction.lblTotalRejects.Caption
tProd = frmProduction.lblTotal.Caption

rRate = Rejects / tProd 'msgbox gives 0

sTime = ThisWorkbook.ActiveSheet.Cells(lRow, "B")
fTime = Now
tTime = fTime - sTime

pRate = tTime / tProd 'msgbox gives 0

ThisWorkbook.ActiveSheet.Cells(lRow, "O") = Rejects
ThisWorkbook.ActiveSheet.Cells(lRow, "P") = tProd
ThisWorkbook.ActiveSheet.Cells(lRow, "AH") = Format(rRate, Percent) 'not working
ThisWorkbook.ActiveSheet.Cells(lRow, "AI") = Format(tTime, "h:mm")
ThisWorkbook.ActiveSheet.Cells(lRow, "AL") = Format(pRate, "h:mm:ss") 'not working

标签: excelvba

解决方案


正如您所猜测的那样,问题是变量声明。

rRate两者pRate都是除法的结果:rRate = Rejects / tProdpRate = tTime / tProd。由于声明了变量,因此产生的任何小数位都将被静默丢弃As Long

例如,如果您希望rRate为 0.475,如果声明As Long小数位将被丢弃,它将等于 0,您msgBox将返回 0。相反,您可以声明它们As Double

有关详细信息,请参阅LongDouble数据类型。


推荐阅读