警告:这并不回答您的确切问题,但它确实试图提供潜在的解决方案。
我不知道有什么办法可以完全按照你的要求去做......但也许有一个妥协解决方案,你可以使用UDF并让UDF首先调用工作表函数。如果有效,则返回结果。否则,请进入您的自定义功能。这意味着你必须用MYCONVERT替换CONVERT的所有实例,从我的有限制的角度来看,这似乎是一个合理的取舍。
这是一个这可能看起来如何的快速示例。
自定义转换样板:
Private Function Factor(Unit As String) As Double
Select Case LCase(Unit)
Case "dozen"
Factor = 12
Case "dz"
Factor = 12
Case "unit"
Factor = 1
Case "piece"
Factor = 1
Case "each"
Factor = 1
Case "ea"
Factor = 1
Case "gross"
Factor = 144
Case Else
Factor = 0
End Select
End Function
而且你的UDF:
Function MYCONVERT(Val As Double, FromUnit As String, ToUnit As String) As Variant
On Error GoTo CUSTOM
MYCONVERT = WorksheetFunction.CONVERT(Val, FromUnit, ToUnit)
Exit Function
CUSTOM:
Dim fromFactor, toFactor As Double
fromFactor = Factor(FromUnit)
toFactor = Factor(ToUnit)
If fromFactor = 0 Or toFactor = 0 Then
MYCONVERT = CVErr(xlErrNA)
Exit Function
End If
MYCONVERT = Val * (fromFactor/toFactor)
End Function
而且现在任何一个应该工作:
=MYCONVERT(A1,"in","ft")
=MYCONVERT(3,"dozen","piece")