我正在编写一个代码,该代码可以允许用户编写单个变量函数以及计算它的值

时间:2017-06-30 19:39:08

标签: excel-vba vbscript vba excel

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

1 个答案:

答案 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

它在您的示例输入中按预期工作,但如果Funtan(t)则会崩溃,因为它会尝试评估"0.5an(0.5)"。如果t包含在括号中,则只需替换Fun中的t即可解决此问题,但这需要例如函数t^2 + 1输入为(t)^2 + 1,这很烦人。

对于另一种方法,创建2个命名单元格ty,然后:

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