2017-02-17 66 views
2

我想创建一个函数,具有BESSELK函数作为参数。我发现fordom.free.fr此代码:函数集成贝塞尔函数

Option Explicit 

Function F(ByVal Equation As String, Optional ByVal X As Variant = 0) As Double 
'Evaluates f(x) at position x 

'Uppercase 
Equation = UCase(Equation) 
With WorksheetFunction 
'avoid mixing up EXP with exp and X 
Equation = .Substitute(Equation, "EXP", "exp") 
'set value X instead of letter X 
Equation = .Substitute(Equation, "X", X) 
'converts comas into points 
Equation = .Substitute(Equation, ",", ".") 
'Changes)(with)*(
Equation = .Substitute(Equation, ")(", ")*(") 
End With 

'calculates expression 
F = Evaluate(Equation) 

End Function 

和改性它考虑到2个参数:

Option Explicit 

Function F(ByVal Equation As String, Optional ByVal X As Variant = 0, _ 
& **Optional ByVal Y As Variant = 0**) As Double 
'Evaluates f(x) at position x 

'Uppercase 
Equation = UCase(Equation) 
With WorksheetFunction 
'avoid mixing up EXP with exp and X 
Equation = .Substitute(Equation, "EXP", "exp") 
'set value X instead of letter X 
Equation = .Substitute(Equation, "X", X) 
**'set value Y instead of letter Y 
Equation = .Substitute(Equation, "Y", Y)** 
'converts comas into points 
Equation = .Substitute(Equation, ",", ".") 
'Changes)(with)*(
Equation = .Substitute(Equation, ")(", ")*(") 
End With 

'calculates expression 
F = Evaluate(Equation) 

End Function 

当我尝试F( “X + Y”; 5; 2) ,它返回7,这是没问题的。然而,当我尝试 F(“BESSELK(X; Y)”; 5; 1),它给我一个#VALUE错误

我的文档中检查和变量类型或从贝塞尔函数的两个参数确实是“Variante”。

我真的不明白为什么这里出错了!我也尝试了一个更简单的函数F(“POWER(x; y)”; 5; 2),但它也给我一个#VALUE错误。

任何帮助都比欢迎!非常感谢你。

回答

0

这些线

Equation = .Substitute(Equation, "EXP", "exp")

Equation = .Substitute(Equation, "Y", Y)

的思想是形式参数XY大写式内被写入。

=F("BESSELK(X;Y)";5;1) ' <-- Capital X, capital Y 
=F("POWER(x;y)";5;2) ' <-- idem 

请注意,此UDF只适用于您的区域设置。

+0

非常感谢您的回答。我试图用大写字母设置BESSELK函数中的变量,但它没有改变任何东西,仍然存在#VALUE错误。感觉参数X和Y没有链接到BESSELK函数。 – MaximeS

+0

在我为我的语言环境更改它之后,没有您的代码适用于我(删除了公式中的'Equation = .Substitute(Equation,“,”,“。”)'并且使用了逗号而不是分号)。 BESSELK应该也能工作。您的区域设置是什么? –

+0

你试过'= F(“POWER(x; y)”; 5; 2)'? –