比如我们要将一个字符串中的特定字符串调用特定的函数。一个两个函数直接固定设置就可以了,但函数一多就麻烦了。每个函数的参数个数不固定,参数类型不一样。
如何简单有效的调用函数呢?!Public Function StrCall(ByVal Expression As String)Dim SResult As StringDo Until Not 包含特定字符串 '如 {MID(参数1,参数2,参数3)}
    SResult = ""
    获得参数
    分割参数
    
    SResult = Mid(参数1, 参数2, 参数3)
    
    '替换
    Expression = Replace(Expression, 特定字符串, SResult)
LoopStrCall = Expression
End Function

解决方案 »

  1.   

    用 Script Control 控件,变量、对象、函数、表达式都支持
    http://topic.csdn.net/u/20090727/13/385B59B5-9609-41B7-8DB9-2628A7EE376E.html
    http://topic.csdn.net/u/20091127/13/30781CE2-2B68-435D-8048-B4D511130F0B.html
    http://topic.csdn.net/u/20080320/20/730421d6-ec5f-4c3c-9a72-52455b294ac3.html
    http://topic.csdn.net/u/20081211/13/0ea14996-0b90-4cd0-91dc-cb558c86cee1.html
      

  2.   

    考虑使用ScriptControl控件
    ---------------------------------------不同的函数完成一个不同的功能,建议该合并的合并,然后直接调用你的函数,而不要去绕圈子调用。
      

  3.   

    '引用组件 Microsoft Script Control 1.0
    '在窗体上添加 ScriptControl、CommandButton、TextBox(多行)
    Option ExplicitPrivate Sub Command1_Click()
        ScriptControl1.Reset
        ScriptControl1.AddObject "Form1", Me, True
        ScriptControl1.AddCode Text1.Text
        ScriptControl1.Run "ShowTime"
    End SubPrivate Sub Form_Load()
        ScriptControl1.Language = "VBScript"
        Text1 = "Sub ShowTime()" & vbCrLf & _
                "    Form1.Caption = Now()" & vbCrLf & _
                "End Sub"
    End Sub这个我们可以把要解析的函数弄到“ScriptControl1.AddCode Text1.Text”中的Text1.Text中去这样我们就可以达到动态编辑源码了?!不是么?!
      

  4.   

    就是这样,如果不需要返回值的过程就用 ExecuteStatement() 调用,函数就用 Eval() 调用。
      

  5.   

    Run() 适用于预先确定参数个数的场合,如果送进来的就是一个字符串表示的语句或表达式,用 ExecuteStatement() 或 Eval() 更方便。
      

  6.   

    网上找了一下,关于ScriptControl的资料并不多