ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: cbtaja

[原创] 一个通用的EXCEL工程量计算表

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-30 12:59 | 显示全部楼层
有木马,何解?没这个必要吧

TA的精华主题

TA的得分主题

发表于 2014-11-30 16:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个吧里大神真多,我都无地自容了

TA的精华主题

TA的得分主题

发表于 2015-3-9 17:03 | 显示全部楼层
cbtaja 发表于 2014-4-28 20:59
带注释的计算式求值函数更新一下:

老师你好!
为什么这样不行啊?
Function Gcl(cell) '工程量计算
    With CreateObject("MSScriptControl.ScriptControl")
        .Language = "vbscript"
        Gcl = .EVAL(cell)
    End With
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 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中的注释内容忽略掉,再把常见的双字节字符替换为单字节字符,然后再计算。这样可以避免常见的书写不规范的情况。但是,这不能杜绝不规范的输入,这种情况下,函数结果以中文“错误“开头,以提示检查原式:
  1. Function EVLT(ByVal RCV As String)
  2.     Dim regEx As Object, x As Object ' 建立变量。
  3.     Set x = CreateObject("MSScriptControl.ScriptControl") '此控件不能在64位OFFICE中使用,否则报错!!
  4.     x.Language = "jscript"
  5.     Set regEx = CreateObject("VbScript.RegExp")
  6.     regEx.Pattern = "(\[[^\][]*\])+" '
  7.     regEx.IgnoreCase = True
  8.     regEx.Global = True
  9.     On Error Resume Next '
  10.     If RCV = "" Then
  11.         EVLT = ""
  12.     Else
  13.         EVLT = Replace(Replace(regEx.Replace(RCV, " "), "(", "("), ")", ")")
  14.         EVLT = Replace(Replace(EVLT, "×", "*"), "÷", "/")
  15.         EVLT = Replace(Replace(EVLT, "+", "+"), "-", "-")
  16.         EVLT = x.Eval(EVLT)
  17.         If Not IsNumeric(EVLT) Then EVLT = "错误:" & EVLT
  18.     End If
  19. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-3-18 14:17 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-3 22:22 | 显示全部楼层
本帖最后由 cbtaja 于 2016-5-14 18:39 编辑

更新:
更新1、添加并完善“逐步提示”功能:以拼音首字母来快速查询定额分项并自动完成的代码。
其中,①、汉字的拼音提取代码取自本论坛精华贴:[解决多音字]汉字转拼音的完美解决方案[12.11.29更新] http://club.excelhome.net/forum.php?mod=viewthread&tid=229924
②、自动提示功能模块的框架取自本坛会员“百度不到去谷歌”的贴子:原创--输入提示自动补全,简码输入,首字母拼音输入http://club.excelhome.net/thread-1111136-1-1.html
③、将自动匹配提示功能模块的核心代码由原ADO改为正则表达式工具,使查询速度更快。毕竟,正则表达式工具专为文本匹配查询而生!
④、优化原匹配查询的过程:当输入的字符较少时,执行原代码可能匹配出来的项数目过多,不仅消耗太多的查询时间,而且得不到有用的结果。优化后,指定输入的拼音首字母字符串必须达到一定长度(默认4个)后才作匹配查询,极大提高了准确率,效率倍增。同时,由于正则表达式查询的灵活性,对于可利用的关键字信息较少或较多时,也都能很好适应。比如,仅有关键字信息“北京”,则可以输入“bj..”来查询(在正则表达式中,“.”为通配符,代表任意一个字符,以此可凑足4个字符,即可查询);或要查询包含有多个信息的项,如“北京XX路XX号XX大厦万达影院”,则可以输入“bj.*l.*h.*ds.*wdyy”(在此正则表达式中,“.*”可代表任意多个字符)来查询。
更新2、添加了.xltm格式模板,以此模板创建的文档定稿后,可通过另存为.xlsx格式,非常方便地去除其中的宏代码和“减肥”,便于与他人共享表格。其中的数据汇总表格,是以数据透视表来完成,并不会受到不利影响。同时,仍保留并更新了xlt格式模板。

说明:由于添加了土建工程定额分项名称的原因,模板文件体积有所增大。
工程量计算表.rar (551.95 KB, 下载次数: 417)
另外,做了一个智能提示功能中匹配出多个值,并可选择其中的若干个一次性输入工作表中的例子,下载地址是:http://club.excelhome.net/forum. ... DkxODkxMnwxMjcyMDkz


做了一个入库单打印时自动保存的例子,其中的客户名称和商品编号都可以智能提示自动完成: 进仓单模板002.rar (32.44 KB, 下载次数: 83)

TA的精华主题

TA的得分主题

发表于 2016-4-4 10:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
360提示有木马!

TA的精华主题

TA的得分主题

发表于 2016-4-4 15:04 | 显示全部楼层
本帖最后由 kfhgng 于 2016-4-4 15:06 编辑

在win10(64位)下 office2016(64位)下,不能用,请问怎么样弄,谢谢!
QQ图片20160404150531.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-4 17:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
kfhgng 发表于 2016-4-4 15:04
在win10(64位)下 office2016(64位)下,不能用,请问怎么样弄,谢谢!

64位vba调用32位的windows API时,声明API函数时,需要添加ptrSafe关键字,即需要把Declare替换为Declare ptrSafe,即可解决你所提出的这个问题。

但是,本例子中使用的MSScriptControl.ScriptControl控件是32位的控件,在64位的OFFICE中是无法正常使用的,同时,微软目前没有提供其相应的64位控件。事实上,很多常用的32位的控件,在64位的OFFICE中都无法正常使用,而且目前也没有可替代的解决办法。
所以,对于一般办公人员来说,使用64位win系统+32位的OFFICE,是最好的解决办法。毕竟,64位OFFICE相对于32位OFFICE的最大优点,就是能够管理和使用超出4G的内存(理论上最大可使用4G×4G内存),在需要一次性处理超多数据时,可以大显身手;而在普通办公任务时,64位OFFICE在这方面的优势相对有限,但却要失去大量常用的32位控件支持,其实是得不偿失。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-11 16:36 | 显示全部楼层
本帖最后由 cbtaja 于 2016-4-28 21:45 编辑

做了一个土建用的工程量计算表,已经初具成效。先放上来,抽时间再优化。http://club.excelhome.net/forum. ... DkxODkxMnwxMjcwNjIw
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 19:30 , Processed in 0.050328 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表