以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 请教vba (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=170214) |
-- 作者:hb8888 -- 发布时间:2021/7/16 17:52:00 -- 请教vba 大师:请问一个excel文件中的各表之间公式较多,打开文件较慢,有何办法能快速打开文件? |
-- 作者:有点蓝 -- 发布时间:2021/7/17 8:48:00 -- 我没有办法。去execl论坛咨询一下哪些老execl用户 |
-- 作者:tommargq2 -- 发布时间:2021/7/17 9:06:00 -- excel公式数量多或者经常使用SUMIFS或Sumproduct这种遍历函数会严重拖慢EXCEL的运算,几点开发建议给你(我自己搭建系统亲测过的): 1、将Excel的公式改为手动计算,并在前提信息录入完成后统一计算。 2、使用代码+公式结合的形式,例如如果有多个工作表结构一样,可将标准结构设置成Model1工作表,预留某个单元格记录各级别名称,并将涉及级别差异带来的计算差异,用公式指向该单元格。然后根据前提中多个级别信息,利用宏自动复制Model1工作表名并改名为各级别名称,并在固定的单元格位置记录级别名称。 3、非固定的跨工作表计算(比如各级别汇总计算),采用宏计算比公式计算要快。
亲测我公司一项目,采用上述思维,将35分钟的运行速度,优化到了1.5分钟 |
-- 作者:有点蓝 -- 发布时间:2021/7/17 9:55:00 -- 以下是引用tommargq2在2021/7/17 9:06:00的发言: ,用多了就有经验。我很少使用execl,对这个基本没有发言权
excel公式数量多或者经常使用SUMIFS或Sumproduct这种遍历函数会严重拖慢EXCEL的运算,几点开发建议给你(我自己搭建系统亲测过的): 1、将Excel的公式改为手动计算,并在前提信息录入完成后统一计算。 2、使用代码+公式结合的形式,例如如果有多个工作表结构一样,可将标准结构设置成Model1工作表,预留某个单元格记录各级别名称,并将涉及级别差异带来的计算差异,用公式指向该单元格。然后根据前提中多个级别信息,利用宏自动复制Model1工作表名并改名为各级别名称,并在固定的单元格位置记录级别名称。 3、非固定的跨工作表计算(比如各级别汇总计算),采用宏计算比公式计算要快。
亲测我公司一项目,采用上述思维,将35分钟的运行速度,优化到了1.5分钟 |
-- 作者:hb8888 -- 发布时间:2021/7/17 10:37:00 -- 谢谢!兄台如果能提供一个实例那就万分感谢了! |
-- 作者:tommargq2 -- 发布时间:2021/7/17 11:26:00 -- 公司的文件都是自动加密且内部流通,解密权在领导那里,没办法发上来,抱歉 |
-- 作者:tommargq2 -- 发布时间:2021/7/17 11:36:00 -- 不太明白你在foxtable论坛中咨询这个问题的原因, 猜想是后台调用Excel时,由于Excel有大量的公式,导致文档打开速度过慢? 在EXCEL文件->选项->公式页面中,将自动计算改为手动计算,可以加速文件的打开速度。 另外有一些复杂的公式,可以采用在文件中设置宏进行计算的方式,这样可以避免大量的计算情况,需要计算时直接运行宏即可。 比如,我有一项工作,是根据不同的项目(每个子项目一张工作表,每个项目子项目数不固定),有一个汇总页批量加权计算所有子项目的和。 由于公式的跨表计算太复杂,就写成了宏进行该项计算,然后通过foxtable调用该VBA完成计算,测试该计算时间从10+min,变到了30s左右。
Sub Refsh_date() Debug.Print Time |
-- 作者:tommargq2 -- 发布时间:2021/7/17 11:48:00 -- 简而言之,打开表慢主要是每次打开时公式自动计算,且复杂公式较多导致的。 那就不如换个思路,关闭自动计算,表中只留简单计算(比如四则运算,sum,avg等非数组公式,注:sumifs和sumproduct等同于数组公式) 涉及到复杂计算就改为宏计算,设置一键运行按钮实现随时调用。 这样就可以保证excel文档打开时不涉及大批量的数组运算,打开速度自然就上去了 |
-- 作者:tommargq2 -- 发布时间:2021/7/17 11:52:00 -- 如果是后台调用,不需要前段显示的EXCEL,可以在foxtable打开workbook前,把application的事件通知EnableEvents,剪切板模式CutCopyMode,显示刷新ScreenUpdating,和警告通知DisplayAlerts这几个事件提前关掉,计算方式改为手动计算Application.Calculation = xlCalculationManual, 再运行workbook.open,就可以减少foxtable打开对应文档时的速度。 |