Excel 除以变量得到假零结果

Excel 除以变量得到假零结果,excel,vba,Excel,Vba,我有一些代码,它从用户表单中获取一些输入,然后将它们输入到我的电子表格中,没有什么棘手的。问题是我的两段数据,是除以其他两个变量的结果,不管真实答案应该是什么,结果总是为零。但是,如果我进入电子表格本身,使用相同的输入进行计算,它的工作完全符合我的需要。引起我悲伤的变量是“rRate”和“pRate”。我的变量声明有问题吗 Dim rRate As Long Dim sTime As Date Dim fTime As Date Dim tTime As Date Dim pRate As Lo

我有一些代码,它从用户表单中获取一些输入,然后将它们输入到我的电子表格中,没有什么棘手的。问题是我的两段数据,是除以其他两个变量的结果,不管真实答案应该是什么,结果总是为零。但是,如果我进入电子表格本身,使用相同的输入进行计算,它的工作完全符合我的需要。引起我悲伤的变量是“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

正如您所猜测的,问题在于变量声明

rRate
pRate
都是分割的结果:
rRate=拒绝/tProd
pRate=tTime/tProd
。由于变量被声明为长,因此结果中的任何小数位数都将被自动丢弃

例如,如果您期望
rRate
为0.475,如果声明
,只要将小数位数丢弃,它将等于0,并且
msgBox
将返回0。相反,您可以将它们声明为Double


有关更多详细信息,请参阅vs数据类型。

为了结束此问题,这里是正在运行的代码。谢谢BigBen的意见

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

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

rRate = Rejects / tProd

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

pRate = tTime / tProd

ThisWorkbook.ActiveSheet.Cells(lRow, "AH") = Format(rRate, Percent)
ThisWorkbook.ActiveSheet.Cells(lRow, "AL") = Format(pRate, "h:mm:ss")

对于rRate为0,我想知道变量Rejects的赋值是否正确?Rejects也会被输入到电子表格中,并且它是正确的值。tProd也一样。当我进入电子表格并将这两个单元格分开时,我得到了正确的答案将它们声明为双倍,而不是长的。由于它们是除法的结果,如果您声明它们为
,则它们的任何小数位数都将被丢弃,只要
非常好,谢谢!全部固定