引用了Script Control 1.0 这个组件Public Function Eval(ByRef strEval)
'On Error Resume Next
Dim EvalObject As New ScriptControl
EvalObject.Language = "VBScript"
EvalObject.AddObject "Me", ESE_Object, True
Eval = EvalObject.Eval(strEval)
Set EvalObject = Nothing
End Function这个只能执行 像
a = "b"
b = "c"
Eval("a+b")但是像 instr 等就无法执行
a = "a,b,c,d"
b = "b"
c = "instr(a,b)"
eval(c)
'On Error Resume Next
Dim EvalObject As New ScriptControl
EvalObject.Language = "VBScript"
EvalObject.AddObject "Me", ESE_Object, True
Eval = EvalObject.Eval(strEval)
Set EvalObject = Nothing
End Function这个只能执行 像
a = "b"
b = "c"
Eval("a+b")但是像 instr 等就无法执行
a = "a,b,c,d"
b = "b"
c = "instr(a,b)"
eval(c)
e.Language = "VBScript"
a = 1
b = 2
Debug.Print e.Eval(a + b), e.Eval(InStr(a, b))
Set e = Nothing
楼上果然可以,但是现在有个问题,不知好不好解决InStr 我也是做变量传的c = "InStr(a,b)"
如果是这样,应该做才可以呢?
建个类,名为"toury";里面就一个公有属性声明Public test As String
然后在FORM里
Private Sub Form_Load()
Dim e As New ScriptControl
e.Language = "VBScript"
e.AddCode "sub main" & vbNewLine & " msgbox ref.test" & vbNewLine & "end sub"
Dim obj(4) As New toury
Dim counter As Byte
For i = 0 To 5
obj(i).test() = i
Next
Dim ref As toury
Set ref = obj(3)
e.AddObject "ref", ref, True'addobject这样使用
e.Run "main"
Set e = Nothing
End Sub
Dim e As New ScriptControl
e.Language = "VBScript"
a = 1
b = 2
c = InStr(a, b)
Debug.Print e.Eval(a + b), e.Eval(e.Eval(c))
Set e = Nothing
所以ScriptControl的主要用途是写脚本引擎用,用这个组件,你可以写一个简单的脚本解析引擎啦,例如5楼所示
Dim e As New ScriptControl
e.Language = "VBScript"
a = "a,b,c,d,e,f,g"
b = "d"
c = "InStr(a, b)"
Set e = Nothing InStr(a, b) 返回7
e.Eval(e.Eval(c)) 返回 0 不对
Dim e As New ScriptControl
e.Language = "VBScript"
a = "a,b,c,d,e,f,g"
b = "d"
c = "InStr(a, b)"
Set e = Nothing InStr(a, b) 返回7
e.Eval(e.Eval(c)) 返回 0 不对 那位给个方法?
应该这样:
Dim a, b
Dim e As New ScriptControl
e.Language = "VBScript"
a = """a,b,c,d,e,f,g"""
b = """d"""
s = "msgbox InStr(" & a & ", " & b & ")"
e.AddCode s
Set e = Nothing
a和b的值没传进去
Dim e As New ScriptControl
e.Language = "VBScript"
a = """a,b,c,d,e,f,g"""
b = """d"""
s = "function myfun(a,b)" & vbNewLine & " myfun=InStr(a,b)" & vbNewLine & "end function" _
& vbNewLine & "msgbox myfun(" & a & ", " & b & ")" e.AddCode s
Set e = Nothing
Dim Str: Str = ""
Str = """" & tt & """"
For tt = 0 To 10
Debug.Print Eval(Str)
Next
End Sub
Public Function Eval(ByRef strEval)
Dim EvalObject As New ScriptControl
EvalObject.Language = "VBScript"
Eval = EvalObject.Eval(strEval)
Set EvalObject = Nothing
End Function