使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

TechKnowledge 内容

问题:已编写比较两个货币值的 VBA 代码。 下面是此代码的示例:

If ccur(cost) > ccur(1000) then

执行此代码行时,会导致数据类型不兼容或类型不匹配类型错误消息。当前Windows货币设置定义为货币符号的英语"磅"符号。 如果将货币符号更改为"$",代码将成功运行。 此处发生的情况是什么,是否有解决此问题的方法?


解答:在 VBA 中,Ccur () 函数在评估此字段时始终遵守控制面板货币设置。 由于 Dynamics VBA 实现始终以字符串传递其字段值,因此,只要计算的货币值与字段中的货币设置不匹配,就会Windows。


在 VBA 帮助文件中,它指示应该使用数据类型转换函数而不是 Val 来提供从一个服务到另一个数据类型国际感知转换。 例如,使用 CCur () 函数时,将根据计算机区域设置正确识别不同的小数分隔符、不同的千位分隔符和各种货币选项。


根据此了解,请注意有关使用 Microsoft Dynamics GP 的注意事项:

  • CCur ("1000") 将等于类型不匹配 (即,如果"Windows 货币"设置未设置为"井号",则此字符串不是有效的货币) 。

  • 如果设置为"井号",则 CCur ("1000") 将返回值 1000,但 CCur ("$1000") 将等于类型不匹配错误。

处理来自 VBA 的货币的最佳方法就是编写一个函数,将前面带非数字符号的任何字符串转换为数字 (或货币) 值。 例如,如下所示:

If CurrencyValueFromDynField(cost) > ccur(1000) then

其中,名为 CurrencyValueFromDynField 的函数定义如下。 此代码正确处理具有继续或尾随减号、用方括号括起或货币符号和数字之间具有空格的负数。

Public Function CurrencyValueFromDynField(FieldString As String) As Currency
Dim i As Integer
Dim TempChar, TempString As String

' Strip off all non-numeric characters
TempString = ""
For i = 1 To Len(FieldString)
TempChar = Mid(FieldString, i, 1)
If InStr("1234567890.,-()", TempChar) > 0 Then
TempString = TempString & TempChar
End If
Next
FieldString = TempString

' Return the numeric value of the string (as a currency data type )
CurrencyValueFromDynField = CCur(FieldString)
End Function

本文为 TechKnowledge 文档 ID:10036

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×