【问题标题】:Calculated textbox does not calculate if Unit Price is formatted as Currency如果单价格式设置为货币,则计算文本框不会计算
【发布时间】: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)。为什么要去掉美元符号?

标签: vba ms-access


【解决方案1】:

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

.txtUnitPrice = Format(.cboItemRequested.Column(4), "Currency")

是的,格式化为货币的 txtBoxPrice 出于某种原因忽略了它。

但为了让 TotalPrice 正确显示,最后必须重新计算它。这是我得到的第一个提示。谢谢克里什KM

【讨论】:

  • 发现最初的问题。美国货币符号在值前面,您使用了Val()函数。但是 Val 函数在它无法识别为数字的一部分的第一个字符处停止读取字符串。在即时窗口中测试?Val("$23")and?Val("23$")
猜你喜欢
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2019-03-09
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多