VBA:Evaluate(字符串)和Val(字符串)之间有区别吗



Evaluate()方法应用于string时返回double。CCD_ 4函数还返回一个CCD_。

Evaluate("123") = 123
Val("123") = 123

在这种情况下,两者有什么不同吗?

  1. Microsoft Excel VAL函数接受字符串作为输入,并且返回在该字符串中找到的数字

  2. 评估将Microsoft Excel名称(字符串)转换为对象

    你刚刚选错了例子。

Microsoft Excel名称:

Microsoft Excel中的以下类型的名称可用于方法:公式。

A1样式参考。你可以使用的任何参考

A1样式表示法中的单个单元格。所有参考文献均视为绝对参考文献。范围。可以对引用使用范围运算符、交集运算符和并集运算符(分别为冒号、空格和逗号)。

已定义的名称。您可以用的语言指定任何名称宏。

外部参考。您可以使用!运算符引用另一工作簿中定义的单元格或名称,例如Evaluate([BOOK1.XLS]Sheet1!A1")。

图表对象。您可以指定任何图表对象名称,例如";图例""绘图区域";,或";系列1";,访问该对象的属性和方法。例如,Charts("Chart1").EEvaluate("Legend").Font.Name返回图例中使用的字体的名称。

这些信息可能有点过时,但在Paul Kimmel的《Excel 2003 VBA程序员参考》中,他对Val()做了以下介绍。

Val是我们见过的最常见的函数,用于从字符串到数字。它实际上只转换美国格式的数字字符串转换为数字。所有其他字符串到数字的转换函数试图将整个字符串转换为数字,并引发错误,如果他们不能。然而,瓦尔从左到右工作,直到找到一个它无法识别为数字一部分的字符。许多的通常在数字中找到的字符,如$和逗号,是足以阻止它识别数字。瓦尔不认识美国格式的日期字符串。

换句话说,如果Val遇到字符串中不是数字的东西,它将返回到该点的所有数字:

debug.? val("100")
 100
debug.? val("100$")
 100
debug.? val("100,000")
 100 

另一方面,Evaluate()用于"将Microsoft Excel名称转换为对象或值",正如JLILI Aman在之前的回答中所述,如果在字符串中遇到无法转换为数字的内容,则会引发错误:

debug.? evaluate("100")
 100 
debug.? evaluate("100$")
Error 2015
debug.? evaluate("100,000")
Error 2015

Evaluate最常用于在宏中使用工作表函数。它有时也被用作一个范围的简写。

Val()函数除了是一个简单的转换函数外,还有一个用途。它将返回所有数字字符,直到到达非数字字符为止。如果尝试转换包含非数字数据的字符串,CStr()将返回错误。例如,Val("123abc")将返回数字123,而Cint("123abc")则返回数据类型不匹配错误。

你的意思是Eval()吗?如果是,这将尝试进行任何必要的计算,使Eval("2*3")=6,但Val("2*3")=2

最新更新