如何把字符串转换成表达式

fenqing 2003-10-12 09:12:49
dim a
a =1

if text1.text then
msgbox "test"
endif



执行的时候报错,类型错误,求解决方案,勿用vbscripts
...全文
113 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fenqing 2003-10-12
  • 打赏
  • 举报
回复
给我一个可以解决我的问题的方法,如何替代IF语句中的表达式
lop008 2003-10-12
  • 打赏
  • 举报
回复
楼上的方法果然厉害,领教了!
rainstormmaster 2003-10-12
  • 打赏
  • 举报
回复
当然,也可以自己根据字串的内容进行解析,下面是一个例子:
http://www.freevbcode.com/code/Parser.zip
rainstormmaster 2003-10-12
  • 打赏
  • 举报
回复
Private Declare Function EbExecuteLine Lib "vba6.dll" _
(ByVal StringToExec As Long, ByVal Any1 As Long, _
ByVal Any2 As Long, ByVal CheckOnly As Long) As Long

Dim Variable As Variant

Function ExecuteCode(Code As String, Optional CheckOnly As Boolean) As Boolean
ExecuteCode = EbExecuteLine(StrPtr(Code), 0&, 0&, CheckOnly) = 0
End Function
Private Sub cmdCheckCode_Click()
Dim Code As String
Code = Replace(txtCode.Text, vbCrLf, ":")
MsgBox ExecuteCode(Code, True)
End Sub

Private Sub cmdExecuteCode_Click()
Dim Code As String
Code = Replace(txtCode.Text, vbCrLf, ":")
Call ExecuteCode(Code)
End Sub

Private Sub Command1_Click()
MsgBox a
End Sub

Private Sub Form_Load()
txtCode.Text = "a=1+2*3" + vbCrLf + "Variable=a" + vbCrLf + "msgbox a"
Label1.Caption = "请在文本框中输一段代码,看看效果"
cmdExecuteCode.Caption = "执行代码"
cmdCheckCode.Caption = "执行结果"
End Sub
TechnoFantasy 2003-10-12
  • 打赏
  • 举报
回复
需要首先引用 Microsoft Script Control:

在工程中创建一个class module,然后在其中加入代码:
Public k1 As Integer

在Form中添加一个TextBox,一个commandbutton和一个ScriptControl:

Private Sub Command1_Click()
Dim a(1)
Dim shar As New Class1

ScriptControl1.AddObject "sh", shar
ScriptControl1.AddCode "Function Main(x)" & vbCrLf & "kk=" & Text1.Text & vbCrLf & "sh.k1 = kk " & vbCrLf & "End Function"

ScriptControl1.Run "main", a
MsgBox "结果等于:" & shar.k1, , "运算结果"
End Sub


Private Sub Form_Load()
Text1.Text = "3+2*1"
End Sub

fenqing 2003-10-12
  • 打赏
  • 举报
回复
VBA6.DLL 中导致无效页错误。
Registers:
EAX=00000000 CS=0167 EIP=0fa916aa EFLGS=00000206
EBX=00000096 SS=016f ESP=0067eccc EBP=0067ece0
ECX=0067ed84 DS=016f ESI=0067ed84 FS=2eaf
EDX=81730000 ES=016f EDI=00000096 GS=0000
Bytes at CS:EIP:
8b 08 50 ff 51 0c c2 04 00 6a 01 58 84 05 e4 c0
Stack dump:
00000096 0fa91a89 00000096 00000000 0000004b 0067ed94 0fbb6ad9 00000078 00000000 00000096 0067ed0c 00000000 00000001 0067edf4 0067f290 00000001
rainstormmaster 2003-10-12
  • 打赏
  • 举报
回复
//执行时报错,2000和98干净的系统都试过了,不知道为啥

报什么错,是文件找不到吗?

是的话,指明vba6.dll的绝对路径
kmzs 2003-10-12
  • 打赏
  • 举报
回复
高手在这,就不弄斧了!
rainstormmaster 2003-10-12
  • 打赏
  • 举报
回复
//vba6可不小啊,有没有系统里的API
Private Declare Function EbExecuteLine Lib "vba6.dll" _
(ByVal StringToExec As Long, ByVal Any1 As Long, _
ByVal Any2 As Long, ByVal CheckOnly As Long) As Long

用的就是api函数呀,一般用户的机器上都应该有vba6.dll
fenqing 2003-10-12
  • 打赏
  • 举报
回复
出现新问题,vba6 好像不是很稳定,在vb IDE中执行没问题,而编译生成EXE后,执行时报错,2000和98干净的系统都试过了,不知道为啥
fenqing 2003-10-12
  • 打赏
  • 举报
回复
解决了,谢谢rainstormmaster(rainstormmaster)的方法,vba6可不小啊,有没有系统里的API啊

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧