在ASP里面有种
execute 的用法如下execute "a=1"response.write a显示结果是1即将字符串里面的语句执行,给A赋值请问VB里面能不能有这样的用法,还是说必须写一个执行的函数,如果是,请大家帮忙写个或者告知原理,谢谢了
execute 的用法如下execute "a=1"response.write a显示结果是1即将字符串里面的语句执行,给A赋值请问VB里面能不能有这样的用法,还是说必须写一个执行的函数,如果是,请大家帮忙写个或者告知原理,谢谢了
解决方案 »
- 谁给个小的用VB编写的图书管理系统 数据库ACCESS
- 一个视频单位不懂得算```请帮下下我拉!
- adox 如何获取access数据表中各列名称?
- 数据库循环判断问题
- VB里有什么函数能返回当前文件目录,不是My Document的。
- FileSystemObject怎样过滤文件,例如扩展名为.exe的文件?
- 怎么设计这样一个variant数组,在函数中返回,在另一个函数中解析?
- 新手请教!
- 这句SQL语句该怎么写???(紧急!!!!)
- TreeView控件的NodeClick事件问题
- Excel VBA中图表错误“不能设置类 series的values属性
- 如何查找并定位VB6的TreeView控件中的某个节点
http://blog.csdn.net/Sun_Jianhua/archive/2004/10/12/133767.aspx看看是不是你要的~
引用microsoft script control x.x
Dim Ax As New MSScriptControl.ScriptControl
Ax.Language = "VbScript "
Debug.Print Ax.Eval(Text1.Text)
比如一个未知变量,按照一定的格式
如
D="M=M+1" 或者 D="k=k*10"
之类的,我不知道D里面的是什么值,但是都固定一种计算格式或者方法
在某个地方我要这样用
M=0
k=1
execute D然后response.write M&K但是VB里面没有类似的用法
好象execute必须作为一个函数的属性或者方法来处理,不知道有没有高手帮助解决下这个问题!
万分感谢
以下是陈锐老大以前在回答别人类似问题时的回帖,原样引用如下:
如果计算结果的话,可以使用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,就会显示运行结果。
Ax.Language = "VbScript "
Debug.Print Ax.Eval(Text1.Text) '大大,这句能解释一下吗?
你不用看第一种方法了,就把陈锐老大提供的代码稍作修改就行了。
如果是窗体级变量,要在窗体的通用声明部分用dim或者private声明;
如果是过程级变量,就在每个过程里现用现声明就行了。
'以下是一种不用引用别的文件的方法。自己写的方法。此贴是前段时间,有人给我的主题里面的解决方案。
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
而不是将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
而不是将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
呵呵
怀恋用fox和vfp的美好年华
首先。。ScriptControl完全可以执行字符串命令
他可以添加VB环境中的对象。。到组件中去
但不能共用VB环境中的变量比如
ScriptControl.AddObject "T",Text1
参数Text1是一个文本框
而参数T就是在ScriptControl中引用这个文本框对象的名字
这样在ScriptControl的代码中就可以这样操作文本框
T.Text="执行字符串命令时赋值"当LZ需要共享一个变量时。。
可以首先在VB环境中定义一个类实例。。
然后再将这个类实例传递到组件中。。在组件中对这个类实例进行操作
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")这句没有效果不知道问题在哪里,请大大们指正
而不是将a+1赋值给a,那应该用scriptcontrol.executestatement("a=a+1")。
另外,在这些scriptcontrol语句中的变量a与vb中的a互不相关,所以无论用eval还是
executestatement都不会改变程序开始定义的变量a.
而不是将a+1赋值给a,那应该用scriptcontrol.executestatement("a=a+1")。
另外,在这些scriptcontrol语句中的变量a与vb中的a互不相关,所以无论用eval还是
executestatement实际上都不会改变程序开始定义的变量a.