ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 用图表做了一个甘特图(2007版),运行速度上不去

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-10 23:19 | 显示全部楼层
本帖最后由 qy1219no2 于 2013-9-10 23:22 编辑

此前曾经试过划线、代码填充底色、条件格式等方法,但由于数据较多(大约要达到2000行左右,列数要精确到天,这样就需要500列),文件太大(这些方法文件要达到50M多),无法实施网上操作。最终确定使用图表来实现,文件大小是下来了(最多不超过1M),可是速度的问题折腾了一周了。始终找不到好的解决方式。郁闷、纠结(关键是公司好多人不会用Project软件,只好搞这么个东东)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-10 23:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
期望个位高手高高手不吝赐教!

TA的精华主题

TA的得分主题

发表于 2013-9-11 08:33 | 显示全部楼层
楼主的图表制作的很漂亮!但是无能为力,感谢分享。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-11 10:30 | 显示全部楼层
kuangben8 发表于 2013-9-11 08:33
楼主的图表制作的很漂亮!但是无能为力,感谢分享。

分享啥啊,如果解决不了速度的问题,就成了废品了。

TA的精华主题

TA的得分主题

发表于 2013-9-11 10:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
qy1219no2 发表于 2013-9-10 23:14
确实如你所说,Change事件肯定是反复触发了,因为要更新末级的所有上级的相关数据,每更新一级,就要触发 ...

需要更新的用代码实现

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-11 11:20 | 显示全部楼层
看来是无解了!
单元格只要更新,就必定触发Change事件,就是用代码计算出结果,填入单元格,照样触发Change事件啊。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-11 11:31 | 显示全部楼层
本帖最后由 qy1219no2 于 2013-9-11 11:44 编辑

假设如下图:
B3的结果通过计算B4:B5的最小值进行填列;B2的结果根据B3、B6的最小值填列;每次数据变化后,都要从新计算D列相应行的值。
而这种效果,只能使用Change事件
如果在B5输入数据(或改变数据),则代码先根据序号找到其直接上级,即B3,再找出与B5同级的所有B列所有单元格,求出最小值,填入B3,这时,再次触发Change事件,又根据B3对应的序号,找直接上级,即B2,再找出与B3同级的所有单元格,计算出最小值,填入B2,如此往复直到最高级(即序号为整数)(实际上是一个递归),而每次计算完结果,填入单元格,还要相应计算D列的对应的值。
因此,表面我们是只改变了一个单元格,但实际上代码需要执行Change事件多次(看级次),这样就导致了运算的缓慢。
后来,经过改进,只有当序号为最末级时,一并计算出所有上级的数据,填入相应单元格,如果不是末级,就退出Change事件。这样是快乐许多,但,由于显示结果用图表实现的,图表的刷新速度造成了现在每录入一个数据,都要等几秒的时间。所以,现在需要解决的是:图表刷新能否加快或关闭,等全部结果算完了再打开刷新?
再简言之:现有基础上,将图表删掉,将代码中有关图表的代码删掉,运行状态良好。一旦加上图表,问题就出来了。

图.png

TA的精华主题

TA的得分主题

发表于 2013-9-11 14:27 | 显示全部楼层
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False


don't add Application.ScreenUpdating = true
please test

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-11 14:46 | 显示全部楼层
KCFONG 发表于 2013-9-11 14:27
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False

Thank U Very Math!
此前一直都是成对使用,没想到如此这般……
看来深层次的原因还是没有真正理解VBA语句的作用啊!
再次表示十二万分的感谢!

TA的精华主题

TA的得分主题

发表于 2013-9-11 15:54 | 显示全部楼层
i HAD THINK OF ANOTHER WAY
USE A TEMP SHEET TO STORE THE DATA
PLEASE TEST
BUT SEEM OTHER FORMULA OR LINK MADE THE RESPONSE VERY SLOW

进度(图表)V2.rar

54.72 KB, 下载次数: 44

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-4 00:04 , Processed in 0.048683 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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