mysql_error()函数 字符长度限制_造价盒子:全网最佳突破evaluate函数255字符限制方案...

造价盒子V1.1.2版本推出之后,其中的算量助手,因其强大便捷的公式录入与计算功能,广受好评。 但是也有用户很快跟我反馈,当计算公式字符长度超过255个字符时,计算结果就会出错。

76cd174b5a5e6faa4c37f535be7efa89.png

这是因为V1.1.2版本中,造价盒子是利用宏表函数evaluate计算的。evaluate使用方便,但是当计算文本长度超过255字符,就无法计算。而在造价工作中,手工算量计算公式超过255字符的情况几乎比比皆是,比如某位仁兄发的这张照片,amazing到了我:

28e5c6ef78ec1588871060a03fa8866e.png

我百度了下如何突破evaluate255个字符的限制,结果发现,这问题热度居然还挺高。遗憾的是,看了一圈,也没有看到简单有效的解决方案。

f95818d6ce5888a1003b5f98f597e361.png

于是我想干脆自己重新创建一个函数吧,就叫计算公式。这个自定义函数,不仅对公式的长度不限制 ,而且还支持备注功能。你可以在公式中输入[],然后在[]内添加备注,不影响其计算。(注意必须是[])

9995f3a78ef5c3f677b1db75a63875fa.gif

如果你自己懂VBA,可以用以下代码自己创建此函数,如果不懂,那就用造价盒子帮你一键生成吧。

Function 计算公式(ByVal rg As Range) As Single    Dim jss$    Dim reg As Object    Dim oSC As Object        jss = rg.Value    '去除[]及其以内文本    Set reg = CreateObject("vbscript.regexp")    With reg        .Global = True        .Pattern = "\[.*?(?=\])."        jss = .Replace(jss, "")    End With    '64位office创建ScriptControl对象    Set oSC = CreateObjectx86("MSScriptControl.ScriptControl")    With oSC        .Language = "vbscript"        计算公式 = .Eval(jss)    End With    CreateObjectx86 , TrueEnd FunctionFunction CreateObjectx86(Optional sProgID, Optional bClose = False)    Static oWnd As Object    Dim bRunning As Boolean    #If Win64 Then        bRunning = InStr(TypeName(oWnd), "HTMLWindow") > 0        If bClose Then            If bRunning Then oWnd.Close            Exit Function        End If        If Not bRunning Then            Set oWnd = CreateWindow()            oWnd.execScript "Function CreateObjectx86(sProgID): Set CreateObjectx86 = CreateObject(sProgID): End Function", "VBScript"        End If        Set CreateObjectx86 = oWnd.CreateObjectx86(sProgID)    #Else        Set CreateObjectx86 = CreateObject("MSScriptControl.ScriptControl")    #End IfEnd FunctionFunction CreateWindow()    Dim sSignature, oShellWnd, oProc    On Error Resume Next    sSignature = Left(CreateObject("Scriptlet.TypeLib").GUID, 38)    CreateObject("WScript.Shell").Run "%systemroot%\syswow64\mshta.exe about:""about:"", 0, False    Do        For Each oShellWnd In CreateObject("Shell.Application").Windows            Set CreateWindow = oShellWnd.GetProperty(sSignature)            If Err.Number = 0 Then Exit Function            Err.Clear        Next    LoopEnd Function
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值