VB 例如a = "1+2",怎样才能把这个字符串转换成表达式,即a = 1 + 2呢?

VB6.0 ,好像是没有eval函数

首先题主要明确,VB 是一种编译性语言,不是 JS 脚本这种解释性语言,不会有 eval 这种翻译代码的函数的,因为 VB 的代码在编译的时候已经用 link.exe 翻译了,只有脚本才会有 eval 之类的函数。

 

所以要想这么用的话,只能调用 VBS 或者 JS 的函数来写,VB 本身是没有的,比如调用 VBA 的 EbExecuteLine():

Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long
    
Public Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
    ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function
    
Private Sub Command1_Click()
    ExecuteLine "Dim a As Integer"
    ExecuteLine "a = 1 + 2"
    ExecuteLine "Msgbox a"
End Sub

 

或者是用 MSScriptControl,这个题主可以自行查找下,网上有很多。

 

总之,利用 VB 本身的功能是不可能实现的,只能去调用其他的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-05
没学过,不好意思帮不上你的忙,不过希望你可以自己努力
第2个回答  2013-09-05
楼主说的是让VB算字符串?追问

嗯对。

追答

这里有代码,自己写的,你试试看,只支持+-*/()这几个运算符

调用MyMainCount就行了,参数就是你要运算的字符串(如:"(3+5)*6"),函数的返回值就是你要的数值


追问

哎呀好麻烦哦。简单点好么?只支持+-*就可以,不需要输入数据的合法性检查。只要运算部分。谢谢哈。就是1+1*2-1这样的能算就可以

追答

楼主可以把它装到一个模块里面,调用MyMainCount就行了,里面的函数缺一不可,各有分工,让我拆开的话...
其实你不用看我的代码
我的代码并没有输入数据的合法性检查,只有运算部分...

本回答被提问者采纳

vb的内部函数space(),str()有什么作用的?
空格函数:格式:Space$(n)Space$函数返回n个空格。例如(在立即窗口中试验):a$ ="a"+Space$(4)+"b" Print a$ a b Str()的作用是将数字型变量或常量改变成字符型变量或常量。语法:Str(number)必要的 number 参数为一 Long,其中可包含任何有效的数值表达式。

VB中“:”是什么意思?
在VB中“:”并行符号,可以用来连接两行代码。我们知道在VB中,代码是以行为单位,一条语句一行,但行后加上英文冒号后,可以再多加一行的语句在后面。例如:if i= 1 then a=a+1 b=a+5 end if 可以写成 if i= 1 then a=a+1:b=a+5 VB 的中心思想就是要便于程序员使用,无论是新手...

VB问题,求具体解释
会采用整型来存储 200 * True * 200 的积,所以结果就产生“溢出”。(True转换为-1)对于4题:Print 200 * False * 200 VB首先将False转换为0,所以结果为0 对于6题:Print 200 * CInt(1.3) * 200 VB首先将CInt(1.3)运算得到1,所以也产生“溢出”。产生“溢出”的原因是,整型类型范围...

C++中如何实现把一个字符串里数字的转换成整型
可以先使用正则表达式识别出数字,然后再使用库函数进行类型转换,将识别出的字符串转换为数字类型,库函数如下(一小部分,在 stdlib.h 中定义):_Check_return_ _ACRTIMP double __cdecl atof (_In_z_ char const* _String);_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cd...

java里,如何把String字符串转换成int[]数组?
String table_id="1,2,3,11,20,100"String[] str=table_id.split(,)\/\/以,进行拆分,获得字符串数组 在对每个字符串Integer.parseInt(String s);

怎么用VBS写一个判断大小的程序?(谢谢您的回答)
不光字符串, 其他任何变量都这样被赋值, 例如: a=2, b=12.222等等. 再往下,Inputbox和Msgbox是VBS内建的函数, 一个函数就相当于一个"黑箱", 有输入(参数)和输出(返回值), 你可以不用了解函数是怎么运作的, 只要了解这个函数能干什么就行了, 我们也可以定义自己的函数, 不过那要等到以后再讲. 现在我们...

VB中如何把Ascii字符串转换成字符串,比如:“3030”转换成“00”
function AscStr2String(byval ascstr as string) as string while len(ascstr)>1 AscStr2String=AscStr2String & chr(cint(left(ascstr,2))) '取2个字节,转换成字符,每个字符的asc都是2个字节 ascstr=mid(ascstr,3)' 把前两位切掉,从第三位开始 wend end function ...

vb两个字符串类型的时间,怎样比较大小呢?
可以先用字符串操作,将时、分、秒的数分开,再将时间计算成秒,即总时间=时×3600+分×60+秒,这样总时间1-总时间2就可以得到秒表示的差值,同样可以反过来用将差值表示为时:分:秒的形式。

下面两个赋值语句,哪个是错误的?
A。p的类型是int *,a的类型是int (*)[10],类型不符,不能赋值。将确定的数值赋给变量的语句叫做赋值语句。各程序设计语言有自己的赋值语句,赋值语句也有不同的类型。所赋“值”可以是数字,也可以是字符串和表达式。

用vb写的一个小计算器,如何把小数点进一位
a = a + 1 \/ (10 ^ (n + 1))If a < 0 Then a = a - 1 \/ (10 ^ (n + 1))End Ifa = Round(a)其原理是用CStr()把计算结果转换成字符串再用Instr()找到小数点位数再用Mid()提取被舍入的一位的值,如果为5再根据正负加到6给Round()入 (不保证是最优方案但大概能用)...

相似回答