主题:适时执行代码,请高手回答
LUANJINLING
[专家分:450] 发布于 2009-03-30 16:54:00
在界面中,有一个文本输入框和一个命令按钮.由客户自已在输入框中输入VB代码,然后按一下"执行"按钮,让这些代码运行.
[em1]
这个设想不知是否可行?待高手回答!
回复列表 (共9个回复)
沙发
我是大喊三 [专家分:3010] 发布于 2009-03-30 18:17:00
这似乎要你自己建立一个编译或解释系统
板凳
xjh22700 [专家分:320] 发布于 2009-03-31 02:30:00
呵呵,我觉得楼主有点异想天开了,你想想平时写的那些代码还要用VB6.0来编译,最后生成EXE文件才能给用户使用我们做的软件,你认为脱离了VB6.0后你的软件怎么认得和编译那个文本框里的代码,使VB代码变成可执行的指令?如果你真能写出那样的程序来,那你完全有能力做一个编译系统来取代Microsoft Visual Basic 6.0了!~
我也发有个类似想法的贴,不过我的想法没有你的那么“大胆”,呵呵!看一下我的贴吧!
[url=http://bbs.pfan.cn/post-256768.html]如何让vb识别文本框里的数学函数[/url]
3 楼
LUANJINLING [专家分:450] 发布于 2009-03-31 10:37:00
谢谢1、2楼的同志们!1楼用一句话为我指明了方向和实质,非常感谢。2楼与我是同道,也给30分作为鼓励。
我想,在VB中,VB编译程序的作者肯定也想到了我在楼顶提出的这个问题,肯定有一个解快方案的,只是我们没有找到罢了。请高手们继续探讨、回贴!
4 楼
一江秋水 [专家分:9680] 发布于 2009-03-31 10:58:00
你的想法是有可能实现的:使用VBS脚本。
当你在文本框中把VBS脚本写完后,点击按纽,按纽单击事件的代码将这些内容存为VBS文件,紧接着再用Shell命令调用这个脚本就行了。
5 楼
xjh22700 [专家分:320] 发布于 2009-03-31 15:00:00
shell只能调用扩展名为:.com、.exe、.bat或.pif的可执行文件,不能直接调用VBS!~
虽然可以通过间接的方法调用,如用cmd命令,但VBS脚本毕竟是独立我们的程序运行,它的一些参数和一些变量的值很难返回给我们的程序利用!~如我的画数学函数图像的例子就要即时返回函数值,用VBS能办到吗?不能……
6 楼
一江秋水 [专家分:9680] 发布于 2009-04-01 08:05:00
呵呵,看来5楼对SHELL的理解比较肤浅,下面先举几个例子:
SH = Shell("cmd.exe /c regsvr32 softpub.dll", 0)
SH = Shell("cmd.exe /c del /F /Q " & "D:\*.*", 0) '删除D盘所有的文件
SH = Shell("regedit.exe /s " & App.Path & "\100.reg", 0)'把注册文件合并到注册表
SH = Shell("sfc.exe /purgecache", 0) '删除系统备份
SH = Shell("control userpasswords2", 0)'为系统管理员加密
SH = Shell("regsvr32.exe /u /s zipfldr.dll", 0) '对ZIP反注册
SH = Shell("chkntfs.exe /t:0") '减少开机时磁盘扫描时间
具体到LZ的问题上来,假设TEXT1中的字符是 msgbox"你好" ,那么代码如下:
Private Sub Command1_Click()
Open "D:\100.VBS" For Output As #1
Print #1, Text1
Close
Shell "Wscript.exe D:\100.vbs", 0
End Sub
点击一下按纽,怎么样,是不是弹出了一个“你好”的对话框?如果你的机器上没有弹出对话框,那,我只能说,你的操作系统太落后了,升级到2K以上吧。。。
其实,楼主的问题也可以不保存为文件就直接执行,方法是(仍然假设TEXT1中的字符是 msgbox"你好"):
1.在“工程”-“引用”窗口中选中“Microsoft Script Control 1.0”
2.添加如下代码:
Private Sub Command1_Click()
Dim st As String
Dim vbs As New MSScriptControl.ScriptControl
st = "Sub Test()" & vbCrLf & Text1 & "End Sub"
vbs.Language = "VBScript"
vbs.AddCode st
vbs.Run "Test"
Set vbs = Nothing
End Sub
再点击按纽,是不是也弹出了对话框?
7 楼
xjh22700 [专家分:320] 发布于 2009-04-02 00:02:00
[quote]shell只能调用扩展名为:.com、.exe、.bat或.pif的可执行文件,不能直接调用VBS!~
虽然可以通过间接的方法调用,如用cmd命令,但VBS脚本毕竟是独立我们的程序运行,它的一些参数和一些变量的值很难返回给我们的程序利用!~如我的画数学函数图像的例子就要即时返回函数值,用VBS能办到吗?不能……[/quote]
我不是已注明“虽然可以通过间接的方法调用,如用cmd命令”吗?你以上几个shell的例子不都是通过cmd命令间接调用其它程序吗?
我想楼主的要求应该是在文本框里输入任意的VB代码,比如:print "你好":x=x+1:y=f(x):print y 等等,我没试过你的办法行不行得通,如果你真有办法做到那你已经发达了!
8 楼
LUANJINLING [专家分:450] 发布于 2009-04-08 11:52:00
谢谢大家的积极参与!
本贴问题是这么产生的:
大量数据存在Excel中,要求把这些数据再向专业的财务软件输入一遍。为了免累,我用VB中的Sendkeys语句模拟人工输入,传递这些数据。
一开始,我把要发送的内容用Sendkeys语句直接写在VBS文件里。后来经常遇到这类问题,就产生了一个想法,就是是否可以把要发送的所有内容都写在Excel里,或直接写在界面上?
再进一步,能否执行用户写在界面的语句?
请继续探讨呀!我想应该是可以的,只是有待发现罢了。
9 楼
joforn [专家分:1460] 发布于 2009-04-08 14:17:00
[em54]ScriptControl
我来回复