|
楼主 |
发表于 2015-3-28 20:34
|
显示全部楼层
本帖最后由 cbtaja 于 2015-3-29 20:50 编辑
hcy1185 发表于 2015-3-9 17:03
老师你好!
为什么这样不行啊?
Function Gcl(cell) '工程量计算
因为参数cell有可能不符合EVAL函数的格式要求(比如其中含有注释内容,以及×÷这样的双字节字符),这种情况下没办法正确计算出结果。此外,"MSScriptControl.ScriptControl"控件只能在32位OFFICE系统中使用,如果在64位OFFICE系统中使用则会出错!
下面的代码,先将cell中的注释内容忽略掉,再把常见的双字节字符替换为单字节字符,然后再计算。这样可以避免常见的书写不规范的情况。但是,这不能杜绝不规范的输入,这种情况下,函数结果以中文“错误“开头,以提示检查原式:- Function EVLT(ByVal RCV As String)
- Dim regEx As Object, x As Object ' 建立变量。
- Set x = CreateObject("MSScriptControl.ScriptControl") '此控件不能在64位OFFICE中使用,否则报错!!
- x.Language = "jscript"
- Set regEx = CreateObject("VbScript.RegExp")
- regEx.Pattern = "(\[[^\][]*\])+" '
- regEx.IgnoreCase = True
- regEx.Global = True
- On Error Resume Next '
- If RCV = "" Then
- EVLT = ""
- Else
- EVLT = Replace(Replace(regEx.Replace(RCV, " "), "(", "("), ")", ")")
- EVLT = Replace(Replace(EVLT, "×", "*"), "÷", "/")
- EVLT = Replace(Replace(EVLT, "+", "+"), "-", "-")
- EVLT = x.Eval(EVLT)
- If Not IsNumeric(EVLT) Then EVLT = "错误:" & EVLT
- End If
- End Function
复制代码 |
评分
-
1
查看全部评分
-
|