在ASP里面有种
execute 的用法如下execute "a=1"response.write a显示结果是1即将字符串里面的语句执行,给A赋值请问VB里面能不能有这样的用法,还是说必须写一个执行的函数,如果是,请大家帮忙写个或者告知原理,谢谢了

解决方案 »

  1.   

    你的要求看的不是很明白,
    http://blog.csdn.net/Sun_Jianhua/archive/2004/10/12/133767.aspx看看是不是你要的~
      

  2.   

    第一种方法:
    引用microsoft script control x.x
    Dim Ax As New MSScriptControl.ScriptControl 
    Ax.Language =  "VbScript " 
    Debug.Print Ax.Eval(Text1.Text)
      

  3.   

    晕,到不是要写什么病毒,主要是封装,要用到这种用法,
    比如一个未知变量,按照一定的格式 

    D="M=M+1" 或者 D="k=k*10"
    之类的,我不知道D里面的是什么值,但是都固定一种计算格式或者方法
    在某个地方我要这样用
    M=0
    k=1
    execute D然后response.write M&K但是VB里面没有类似的用法
    好象execute必须作为一个函数的属性或者方法来处理,不知道有没有高手帮助解决下这个问题!
    万分感谢
      

  4.   

    第二种方法:
    以下是陈锐老大以前在回答别人类似问题时的回帖,原样引用如下:
    如果计算结果的话,可以使用ScriptControl控件,这个控件的全名是“Microsoft   Script   Control”,实现方法如下: 
    创建一个程序,再Form1上分别加入一个ScriptControl控件、一个TextBox和一个CommandButton。 
    然后创建一个新的类,类名称为Class1,然后在Class1中加入: 
    Public   k1   As   Integer 
    Public   a   As   Integer 
    Public   b   As   Integer 
    Public   c   As   Integer Public   ev   As   String 在Form1的Command1的Click事件中加入以下代码: 
            Dim   shar   As   New   Class1 
            
            'a   b   c分别为赋值 
            shar.a   =   4 
            shar.b   =   6 
            shar.c   =   2 
            
            ScriptControl1.AddObject   "sh ",   shar 
            'Text1是用户输入的算式 
            Text1.Text   =   "a   +   b   -   c " 
            'shar.ev   =   "with   sh "   &   vbcrlf   &   "sh.a   +   sh.b   -sh.c "   &   "end   with " 
            ScriptControl1.AddCode   "Function   Main() "   &   _ 
                    "dim   a "   &   vbCrLf   &   "dim   b "   &   vbCrLf   &   "dim   c "   &   vbCrLf   _ 
                    &   "   a   =   sh.a "   &   vbCrLf   &   "   b   =   sh.b   "   &   vbCrLf   &   "c   =   sh.c "   &   vbCrLf   _ 
                    &   vbCrLf   &   "kk=   "   &   Text1.Text   &   vbCrLf   &   "sh.k1   =   kk   "   &   vbCrLf   &   "End   Function "         ScriptControl1.Run   "main " 
            MsgBox   "结果等于: "   &   shar.k1,   ,   "运算结果 " 运行程序,点Command1,就会显示运行结果。
      

  5.   

    Dim Ax As New MSScriptControl.ScriptControl 
    Ax.Language =  "VbScript " 
    Debug.Print Ax.Eval(Text1.Text)  '大大,这句能解释一下吗?
      

  6.   

    这两种方法其实是一样的,只不过一个是对ScriptControl的引用,另一个是直接使用ScriptControl控件而已。
    你不用看第一种方法了,就把陈锐老大提供的代码稍作修改就行了。
      

  7.   

    再问一下,如果我有很多类似A,B,C这样的变量,是不是在里面都要一次性都声明完?即使不会用到?
      

  8.   

    声明一些用不到的变量不是白白浪费内存吗?如果是全局变量,要在模块的通用声明里用public声明;
    如果是窗体级变量,要在窗体的通用声明部分用dim或者private声明;
    如果是过程级变量,就在每个过程里现用现声明就行了。
      

  9.   


    '以下是一种不用引用别的文件的方法。自己写的方法。此贴是前段时间,有人给我的主题里面的解决方案。
    Option Explicit Private Function Eval(ByVal s As String) As Variant 
            Dim Lb As Long, Rb As Long 
            Lb = InStrRev(s, "(") 
            While Lb <> 0 
                    Rb = InStr(Lb, s, ")") 
                    s = Replace(s, Mid$(s, Lb, Rb - Lb + 1), CStr(Eval(Mid$(s, Lb + 1, Rb - Lb - 1)))) 
                    Lb = InStrRev(s, "(") 
            Wend 
            If IsNumeric(s) Then 
                    Eval = Val(s) 
            Else 
                    Dim High As Long 
                    High = InStr(s, "+") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) + Eval(Right$(s, Len(s) - High)) 
                            Exit Function 
                    End If 
                    High = InStrRev(s, "-") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) - Eval(Right$(s, Len(s) - High)) 
                            Exit Function 
                    End If 
                    High = InStr(s, "*") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) * Eval(Right$(s, Len(s) - High)) 
                            Exit Function 
                    End If 
                    High = InStrRev(s, "/") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) / Eval(Right$(s, Len(s) - High)) 
                            Exit Function 
                    End If 
                    High = InStrRev(s, "%") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) Mod Eval(Right$(s, Len(s) - High)) 
                            Exit Function 
                    End If 
                    High = InStrRev(s, "!=") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) <> Eval(Right$(s, Len(s) - High - 1)) 
                            Exit Function 
                    End If 
                    High = InStrRev(s, "==") 
                    If High <> 0 Then 
                            Eval = (Eval(Left$(s, High - 1)) = Eval(Right$(s, Len(s) - High - 1))) 
                            Exit Function 
                    End If 
            End If 
    End Function '主函数 
    Public Sub main() 
            Dim Expression As String 
            Expression = "149.5+((100+(6+(90-5*2*2)*4+(1-1))+202)%441)*2*2+0.88+150.5" 
            MsgBox Eval(Expression) 
    End Sub 
      

  10.   

    要注意Eval("a=1")的结果a与1比较运算后的值是False或True,
    而不是将1赋值给a,那应该用scriptcontrol.executestatement("a=1")。
    另外,在这些语句中的变量a与vb中的a互不相关。比如:
    dim a as integer
    debug.print scriptcontrol1.executestatement("a=20")
    a=30
    debug.print scriptcontrol1.eval("a=20") '输出为true
      

  11.   

    要注意Eval("a=1")的结果a与1比较运算后的值是False或True, 
    而不是将1赋值给a,那应该用scriptcontrol.executestatement("a=1")。 
    另外,在这些语句中的变量a与vb中的a互不相关。比如: 
    dim a as integer 
    scriptcontrol1.executestatement("a=20") 
    a=30 
    debug.print scriptcontrol1.eval("a=20") '输出为true 
      

  12.   

    vb中严格讲没有象vfp中的“宏代换”的功能。
    呵呵
    怀恋用fox和vfp的美好年华
      

  13.   

    。使用ScriptControl组件应该可以达到LZ的要求
    首先。。ScriptControl完全可以执行字符串命令
    他可以添加VB环境中的对象。。到组件中去
    但不能共用VB环境中的变量比如
    ScriptControl.AddObject "T",Text1
    参数Text1是一个文本框
    而参数T就是在ScriptControl中引用这个文本框对象的名字
    这样在ScriptControl的代码中就可以这样操作文本框
    T.Text="执行字符串命令时赋值"当LZ需要共享一个变量时。。
    可以首先在VB环境中定义一个类实例。。
    然后再将这个类实例传递到组件中。。在组件中对这个类实例进行操作
      

  14.   

    对ASP进行封装,不用VB解决这个问题就没路了
      

  15.   

    我这样行吗?
    Dim a, b, c
          a = 1
         b = 1
         c = 1
         Dim executeObject As New ScriptControl
         executeObject.Language = "VBScript"
         executeObject.Eval ("a=a+1")
         'executeObject.Eval ("m=m+1")  '如果多这一句会不会有问题?
         Set executeObject = Nothing
         exetest = a & b & c  '最后的结果是 111最后得到的exetest结果为 111,也就是说 executeObject.Eval ("a=a+1")这句没有效果不知道问题在哪里,请大大们指正
      

  16.   

    要注意Eval("a=a+1")的结果a与a+1比较运算后的值是False, 
    而不是将a+1赋值给a,那应该用scriptcontrol.executestatement("a=a+1")。 
    另外,在这些scriptcontrol语句中的变量a与vb中的a互不相关,所以无论用eval还是
    executestatement都不会改变程序开始定义的变量a.
      

  17.   

    要注意Eval("a=a+1")的结果是a与a+1比较运算后的值是False, 
    而不是将a+1赋值给a,那应该用scriptcontrol.executestatement("a=a+1")。 
    另外,在这些scriptcontrol语句中的变量a与vb中的a互不相关,所以无论用eval还是 
    executestatement实际上都不会改变程序开始定义的变量a.