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

2025-01-07 16:29:49
推荐回答(3个)
回答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。

要说明的是:

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

  2. 既然你要执行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

效果(执行前):

效果(执行后):

效果(执行前):

效果(执行后):

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

回答2:

呵呵,我以前也遇到过这个问题,找了很久,终于找到了,跟你分享一下吧:

在窗体上添加一个按钮command1,和一个文本框text1。输入代码:

Private Sub Command1_Click()
Set vbs = CreateObject("MSScriptControl.ScriptControl")
vbs.Language = "VBScript"
vbs.ExecuteStatement (Text1.Text)
End Sub

在文本框中输入要执行的代码,如楼主要求的
msgbox"Hello World!"
点击command1,看看执行效果。

回答3:

你提的这个不是个简单的问题,如你所说,如果只是要出个提示框那好做。但要实现VB的所有功能指令很难——那得另行编造一个VB了,你说的这种需求其实就是VB的编译原理。
如果要实现简单的演示功能,首先要有一个数据库,将VB的基本指令的关键字都录入,当你输入一条指令后,使用字符串查找功能看是哪一个指令,再检查关键字是否齐全,然后将关键字和参数拆分,再将参数传递给程序内已写好的模块内调用相应的函数或指令。