【发布时间】:2019-07-11 00:16:54
【问题描述】:
简单计算 TotalPrice = QTY * UnitPrice
当我将单价显示为货币时不计算。
从 AfterUpdate 事件中的组合框中检索单价,如下所示:
Private Sub cboItemRequested_AfterUpdate()
' 0 1 2 3 4 5 6
' ITEM Category SIZE UI PRICE NSN_ORDER UNIT_PACK
With Me
.txtDescrOfItemRequested = .cboItemRequested
.txtUI = .cboItemRequested.Column(3)
.txtQTY = 1
.txtUnitPrice = Format(.cboItemRequested.Column(4), "Currency")
.txtPartNumNSN = .cboItemRequested.Column(5)
End With
End Sub
即使组合框在第 4 列中正确显示货币,它也不会正确填充单价 txtbox,除非我应用格式(XXXXX,“货币”)。顺便说一句,文本框也被格式化为货币。但是,当我确实出现美元符号时,最终计算的 TotalPrice 仍然为零。
我什至将以下内容应用于 txtTotalPrice
=Val(Nz([txtQTY],0))*Val(Nz([txtUnitPrice],0))
我尝试回复@krish KM,所以我放弃了上面的所有内容,而是创建了这个函数:
Public Function cTotalPrice(vQTY As Variant, vUnitPrice As Variant) As Currency
'only return a value if both fields are numeric
If IsNumeric(vQTY) = True And IsNumeric(vUnitPrice) = True Then
cTotalPrice = vQTY * vUnitPrice
End If
End Function
我只将其称为 cboItemRequested 框的 AfterUpdate 事件,并且在任何时候更新 txtQTY 或 txtUnitPrice
.txtTotalPrice = cTotalPrice(.txtQTY, .txtUnitPrice)
但 txtUnitPrice 根本不显示为货币,即使 txtUnitPrice 格式化为货币。
【问题讨论】:
-
在
afterUpdate事件中调用最终计算 -
格式函数返回文本,而不是数字,值。使用文本框属性来格式化,而不是 VBA。 Val(Nz([txtUnitPrce],0)) 不起作用,因为使用函数格式化后,txtUnitPrice 是一个以 $ 开头的字符串。 Val() 在遇到非数字字符时停止,因此返回 0。
-
请根据您的建议查看我上面修改过的步骤
-
隐式转换失败。如果你乘以数字,你的格式就会丢失(try
?Format(100,"Currency") * 10in immediate window)。你必须格式化结果.txtTotalPrice = Format(cTotalPrice(.txtQTY, .txtUnitPrice), "Currency")。 -
但结果不是问题。不是 txt 总价。只有单价。结果证明与美元符号和所有一切都很好。这就是为什么这令人困惑。它是我已格式化为货币的单价框,我只是将格式的确切类型粘贴到文本框中。该值来自我的组合框的 Column(4)。为什么要去掉美元符号?