Как установить функцию MROUND в MS Access? - PullRequest
1 голос
/ 04 ноября 2019

Эта функция MRound не существует в MS Access, и вы не можете просто установить ее.

Я пытаюсь использовать функцию mround в отчете Access. Функция не указана в окне построителя выражений встроенных функций. Когда я использую вычисление, например, =mround([AmountDue],0.05), и запускаю отчет, он запрашивает параметр mround.

Ответы [ 2 ]

3 голосов
/ 04 ноября 2019

Вы можете определить свой собственный в общедоступном модуле VBA, например:

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

В качестве альтернативы, добавить ссылку на библиотеку объектов Microsoft Excel в проект VBA (Инструменты> Ссылки) и определить * 1004. * функционировать в общедоступном модуле VBA как:

Function MRound(dblNum As Double, dblMtp As Double) As Double
    MRound = Excel.WorksheetFunction.MRound(dblNum, dblMtp)
End Function
1 голос
/ 04 ноября 2019

В Access нет MRound, поэтому создайте свою собственную функцию округления.

Однако, никогда не используйте для этого Round, поскольку она, как известно, глючит. Таким образом, используйте простую математику и тип данных Десятичный , чтобы избежать ошибок:

' 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.Round

и статьях, упомянутых здесь.

...