界面上有个text10控件,里面有个公式是 A-B
以下代码实现的是,利用VBScript语言 eval函数识别文本框中的 公式“A-B”,可是结果一直不正确。
我将Label10 = s.Eval(Text10.Text) 改为Label10 = s.Eval(A-B) 结果是对的。
根据判断,执行过程中,Text10.Text=“A-B”,就是多了双引号,导致结果为0,不正常。所以,请大神们帮我解决以下。如何写这部分。 Private Sub Command13_Click()
Dim A As Long
Dim B As Long
A = 2
B = 444
Dim s
If Text10 = "" Then Exit Sub
On Error GoTo errHandlerSet s = CreateObject("ScriptControl")
s.Language = "VBScript"
Label10 = s.Eval(Text10.Text)              问题在这里,如果写A-B 运行正常,如果写成Text10.Text,不正常,文本框内容还是A-B但是,在这里,变成了“A-B”,这个双引号如果去不掉,没有办法做计算。Set s = Nothing
flag = True
Exit Sub
errHandler:
Text10 = Err.Description
End Sub

解决方案 »

  1.   

    Private Sub Command13_Click()
    Dim A As Long
    Dim B As Long
    Dim s
    Dim tmp As StringA = 2
    B = 444
    If Text10 = "" Then Exit Sub
    On Error GoTo errHandlerSet s = CreateObject("ScriptControl")
    s.Language = "VBScript"tmp = Replace(Text10.Text, " ", "")
    If tmp = "A-B" Then Label10 = s.Eval(A - B)  
    Set s = Nothing
    flag = True
    Exit Sub
    errHandler:
    Text10 = Err.Description
    End Sub
      

  2.   

    Private Sub Command13_Click()
    Dim A As Long
    Dim B As Long
    Dim sA = 2
    B = 444
    If Text10 = "" Then Exit Sub
    On Error GoTo errHandlerSet s = CreateObject("ScriptControl")
    s.Language = "VBScript"Text10.Text = Replace(Text10, "A", A)
    Text10.Text = Replace(Text10, "B", B)
    Label10 = s.Eval(Text10.Text)Set s = Nothing
    flag = True
    Exit Sub
    errHandler:
    Text10 = Err.Description
    End SubVB 并不知道你 Text10 中的字符 "A" 是引用变量 A,,字符 "B" 是引用变量 B。因此使用缺省值 0。
      

  3.   

    Private Sub Command13_Click()
        '-- 定义在这里是不能被Eval调用的 --
        'Dim A As Long
        'Dim B As Long
        'A = 2
        'B = 444
        
        Dim s
        If Text10 = "" Then Exit Sub
        On Error GoTo errHandler
        
        Set s = CreateObject("ScriptControl")
        s.Language = "VBScript"
        
        '-- 添加变量(可以省略 Dim 语句) --
        s.AddCode "A = 2"
        s.AddCode "B = 444"
        
        Label10 = s.Eval(Text10.Text)
        
        Set s = Nothing
        flag = True
        Exit Sub
    errHandler:
        Text10 = Err.Description
    End Sub
      

  4.   

    你那个s.Eval(A-B)相当于s.Eval(2-444) 当然有效果了。因为在vb中这样写 A-B是交给vb去处理的。 而你写s.Eval("A-B")是交给VBScript脚本宿主处理的了。所以变量赋值要么都放到脚本里面,若果放到vb里面那么就要做好对接。就看你的目的是什么了。
    2楼的是将两者做了对接的,3楼是将AB变量赋值的代码都移到脚本里执行的。