2

此功能MRound在 MS Access 中不存在,您不能只安装它。

我正在尝试mround在 Access 报告中使用该功能。该函数未列在内置函数的表达式构建器框中。例如,当我使用计算=mround([AmountDue],0.05)并运行报告时,它会要求输入参数mround

4

2 回答 2

4

您可以在公共 VBA 模块中定义自己的模块,例如:

Function MRound(dblNum As Double, dblMtp As Double) As Double
    MRound = dblMtp * Round(dblNum / dblMtp, 0)
End Function

或者,将 Microsoft Excel 对象库的引用添加到您的 VBA 项目(工具 > 引用),并将MRound公共 VBA 模块中的函数定义为:

Function MRound(dblNum As Double, dblMtp As Double) As Double
    MRound = Excel.WorksheetFunction.MRound(dblNum, dblMtp)
End Function
于 2019-11-03T22:25:12.027 回答
1

Access中没有MRound存在,因此请创建自己的舍入函数。

但是,永远不要使用Round它,因为它臭名昭著。因此,使用简单的数学和数据类型Decimal来避免错误:

' Rounds a value by 4/5 to the nearest multiplum of a rounding value.
' Accepts any value within the range of data type Currency.
' Mimics Excel function MRound without the limitations of this.
'
' Examples:
'
'   RoundAmount(-922337203685477.5808, 0.05)    -> -922337203685477.6
'   RoundAmount( 922337203685477.5807, 0.05)    ->  922337203685477.6
'   RoundAmount( 10, 3)                         ->                9
'   RoundAmount(-10,-3)                         ->               -9
'   RoundAmount( 1.3, 0.2)                      ->                1.4
'   RoundAmount( 122.25, 0.5)                   ->              122.5
'   RoundAmount( 6.05, 0.1)                     ->                6.1
'   RoundAmount( 7.05, 0.1)                     ->                7.1

' 2009-05-17. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function RoundAmount( _
    ByVal Value As Currency, _
    ByVal RoundValue As Currency) _
    As Variant

    Dim BaseValue   As Variant
    Dim Result      As Variant

    BaseValue = Int(Value / CDec(RoundValue) + CDec(0.5))
    Result = BaseValue * RoundValue

    RoundAmount = Result

End Function

例如,此函数将正确舍入:

Amount = RoundAmount( 122.25, 0.5)
Amount -> 122.50

有关精确舍入的更多信息,请参阅我在GitHub 上的项目:

VBA.圆形

以及此处提及的文章。

于 2019-11-04T10:58:48.587 回答