Sub CatMain
t = (InputBox("Enter The value at which it is calculated")) 'like 0.5
Fun =(InputBox("Enter The Function")) 'like sin(t)
msgbox Fun 'message should be 0.4794255
End Sub
答案 0 :(得分:0)
以下是Excel VBA的两种方法:
第一个是直截了当的,使用Evaluate()
:
Sub CatMain1()
Dim t As Double
Dim Fun As String
t = InputBox("Enter The value at which it is calculated")
Fun = InputBox("Enter The Function")
MsgBox Evaluate(Replace(Fun, "t", t))
End Sub
它在您的示例输入中按预期工作,但如果Fun
为tan(t)
则会崩溃,因为它会尝试评估"0.5an(0.5)"
。如果t
包含在括号中,则只需替换Fun
中的t
即可解决此问题,但这需要例如函数t^2 + 1
输入为(t)^2 + 1
,这很烦人。
对于另一种方法,创建2个命名单元格t
和y
,然后:
Sub CatMain2()
Dim t As Double
Dim Fun As String
t = InputBox("Enter The value at which it is calculated")
Fun = InputBox("Enter The Function")
Range("y").Formula = "=" & Fun
Range("t").Value = t
MsgBox Range("y").Value
End Sub
这使得Excel可以进行解析和评估,但是需要为此目的保留2个单元格(如果需要,可以隐藏它们)并要求启用自动计算(默认情况下)。 / p>
虽然我在一些代码中大量使用第二种方法,但这两种方式都不是特别强大。应始终将错误处理用于此类代码。
对于VBScript
,只能对第一个进行修改:
Sub CatMain3()
Dim t, Fun
t = InputBox("Enter The value at which it is calculated")
Fun = InputBox("Enter The Function")
MsgBox Eval(Replace(Fun, "t", t))
End Sub
如果您只是将自己作为个人脚本运行,这很好 - 但是当您对不受信任的用户提供的字符串运行时,您应该知道eval is evil。