如何用VB运行过程中动态执行代码?

如何用VB运行过程中动态执行代码?,第1张

可以用VBScript和CallByName函数结合

比如说你要执行msgbox "Hello World!" 这样的语句就这样

Private Sub Command1_Click()

    Set vbs = CreateObject("MSScriptControl.ScriptControl")

    vbs.Language = "VBScript"

    vbs.ExecuteStatement (Text1.Text)

End Sub

假如你要执行“Text1.top=0”的话就用CallByName。

要说明的是:

VB6.0里面没有CObj函数,所以不能直接用这个函数把字符串转换成对象(object);

既然你要执行Text1.top=0,那么你的窗体上必须得有一个name属性为Text1的控件,我们可以通过遍历窗体控件的方法得到这个得到这个控件。这里给出一个demo

Option Explicit

Private Sub Command1_Click()

    Dim obj As Object

    Dim ObjName As String

    Dim ObjProperty As String

    Dim ObjValue As Variant

    

    '获取控件名,控件属性,控件值

    ObjName = Split(Text1.Text, ".")(0)

    ObjProperty = Split(Split(Text1.Text, ".")(1), "=")(0)

    ObjValue = Split(Split(Text1.Text, ".")(1), "=")(1)

    

    '遍历窗体控件,然后运用控件的属性

    'VbLet——设置属性

    For Each obj In Me.Controls

        If obj.Name = ObjName Then

            CallByName obj, ObjProperty, VbLet, ObjValue

            Exit For

        End If

    Next

End Sub

效果(执行前):

效果(执行后):

效果(执行前):

效果(执行后):

至于应该用哪个,你可以简单做下判断,比如找下要执行的字符串里面有没有“.”等等,,,自己变通下

VB 关于ExeCuteLine的问题:

实际运用时发现,其只能在VB编辑器中生效,如程序Make成exe文件后就不能使用了。后来我找到一种可以代替其功能的方法。实现如下:

在工程中引入Microsoft Script Control,然后通过其实例的.eval函数可以完成同上的功能。且eval函数还可以返回执行的结果。这点比之ExecuteLine更为方便。

例如

tmpStr = scriptControl1.Eval("1 + 2 >4") '用一个字符串变量获取eval的执行结果

执行之后tmpStr的值为"false"。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11584507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存