Vba 如果单价格式为货币,则计算文本框不计算

Vba 如果单价格式为货币,则计算文本框不计算,vba,ms-access,Vba,Ms Access,简单计算总价=数量*单价 当我获取要显示为货币的单价时不计算 单价从AfterUpdate事件中的组合框中检索,如下所示: Private Sub cboItemRequested\u AfterUpdate() ' 0 1 2 3 4 5 6 '项目类别大小UI价格NSN\u订单单位\u包装 和我一起 .txtdescrofitemsrequested=.cboItemRequested .txtUI=.cboItemRe

简单计算总价=数量*单价

当我获取要显示为货币的单价时不计算

单价从AfterUpdate事件中的组合框中检索,如下所示:

Private Sub cboItemRequested\u AfterUpdate()
'  0        1        2    3   4           5       6
'项目类别大小UI价格NSN\u订单单位\u包装
和我一起
.txtdescrofitemsrequested=.cboItemRequested
.txtUI=.cboItemRequested.Column(3)
.txtQTY=1
.TxUnitPrice=格式(.cboItemRequested.Column(4),“货币”)
.txtPartNumNSN=.cboItemRequested.Column(5)
以
端接头
即使组合框在第4列中正确显示货币,它也不会正确填充单价txtbox,除非我应用格式(XXXXX,“货币”)。顺便提一下,文本框也被格式化为货币。然而,当我得到美元符号出现时,最终计算的TotalPrice仍然为零

我甚至对TXTotalPrice应用了以下内容

=Val(Nz([txtQTY],0))*Val(Nz([txtnitprice],0))
我尝试响应@krish KM,因此我放弃了上面的所有内容,而是创建了此函数:

公共函数cTotalPrice(vQTY作为变量,vUnitPrice作为变量)作为货币
'仅当两个字段都是数字时才返回值
如果IsNumeric(vQTY)=True且IsNumeric(vUnitPrice)=True,则
cTotalPrice=vQTY*vUnitPrice
如果结束
端函数
我仅将其称为cboItemRequested框的AfterUpdate事件,并随时更新txtQTY或TXTNITPRICE

.txtotalprice=cTotalPrice(.txtQTY,.txtnitprice)
但是,即使将TxUnitPrice格式化为货币,TxUnitPrice也不会显示为货币。

解决方案: 我需要用VBA格式化TxUnitPrice

.txtUnitPrice = Format(.cboItemRequested.Column(4), "Currency")
是的,由于某种原因,格式为货币的txtBoxPrice忽略了它


但为了使总价格正确,有必要在最后对其进行重新计算。这是我得到的第一个提示。感谢krish KM

调用
afterUpdate
eventFormat函数中的最终计算返回文本,而不是数字值。使用文本框属性设置格式,而不是VBA。Val(Nz([txtnitprce],0))不起作用,因为在使用函数格式化后,txtnitprice是一个开头带有$字符的字符串。Val()在遇到非数字字符时停止,因此返回0。请按照您的建议查看我上面修订的步骤隐式转换失败。如果您将数字相乘,您的格式将丢失(请在即时窗口中尝试使用
?format(100,“Currency”)*10
)。您必须格式化结果
。txtotalprice=format(cTotalPrice(.txtQTY.txtnitprice),“Currency”)
。但结果不是问题所在。不是全部价格。只有单价。结果证明,美元符号和所有的一切都很好。这就是为什么这是令人困惑的。这是我格式化为货币的who’s box的单价,我只是将格式的确切类型粘贴到文本框中。该值来自组合框的第(4)列。为什么要去掉美元符号?发现了最初的问题。美元货币符号位于值的前面,您使用了
Val()
函数。但是Val函数在它无法识别为数字一部分的第一个字符处停止读取字符串。在即时窗口中测试
?Val($23”)
?Val(“23$”
)。