ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 有什么方法能让excelVBA处理表格的速度达到至少每秒1万行以上?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 12:17 | 显示全部楼层
perfect131 发表于 2023-3-22 17:54
可能是你电脑配置不行

大佬,您再看看28楼,加上我说的那行获取总页数的代码在前面,时间是不是慢几十倍?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 12:33 | 显示全部楼层
因为今天几乎都是1万行30秒左右,我刚刚又做了一个试验,就是把个人宏工作簿PERSONAL.XLSB改了一下名,暂时禁用,新建一个工作表,在sheet1创建了那个最短代码测试时间,马上就只有1秒了,但我把那行获取总页数的代码放在最前面,时间马上又变成30秒了,注释掉那行代码,再运行一次,还是30秒。
于是我还原个人宏工作簿PERSONAL.XLSB,重启excel,发现运行那段测试代码,还是30秒,我逐一排查,发现workbook有一条启动运行的代码,如下,只要我注释掉这行,测试就是2秒,开启这条,测试就是30秒,就因为自动显示了分页符?
Private Sub Workbook_Open()
    On Error Resume Next
    ActiveWindow.ActiveSheet.DisplayPageBreaks = True '显示分页符
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 12:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
约定的童话 发表于 2023-3-22 19:30
提高Excel VBA处理表格的速度是一项复杂的任务,因为它涉及多个方面的优化。以下是一些优化Excel VBA处理表 ...

感谢。学到

TA的精华主题

TA的得分主题

发表于 2023-3-23 12:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

应该是获取页面数代码引起的

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 13:15 | 显示全部楼层
Yalishanda30 发表于 2023-3-23 12:56
应该是获取页面数代码引起的

是啊。。这oldpages = ActiveWorkbook.ActiveSheet.PageSetup.Pages.Count 代码太坑了,哪怕表格只有1页。
我在虚拟机也做了试验,本来也是2、3秒时间,加了这行在前面运行了一下,后面1万行时间甚至变成了几百秒。这算不算excel的bug?我的2013存在,虚拟机中的2016版本也存在。相信不是个列了,是全世界的excel都存在这个问题。

TA的精华主题

TA的得分主题

发表于 2023-3-23 13:44 | 显示全部楼层
ActiveSheet.PageSetup 會使工作表顯示"分頁線"(包含打印或預覽之後),
這情況下...不論做什麼...都會拖慢速度,
在程序前面加這行試試//
ActiveSheet.DisplayAutomaticPageBreaks = False

或在"選項"中取消分頁線顯示~~

當調整行高同時, 分頁線也自動跟著調整~~




评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 14:29 | 显示全部楼层
准提部林 发表于 2023-3-23 13:44
ActiveSheet.PageSetup 會使工作表顯示"分頁線"(包含打印或預覽之後),
這情況下...不論做什麼...都會拖慢 ...

但是发现加了这行,在行高增加的时候动态变化,不能监测到真实的页码了。比如我原来只有1页,行高不停地增加,本来已经是几页、几十页了,而ActiveWorkbook.ActiveSheet.PageSetup.Pages.Count这行代码永远却判断是1页。如果加上ActiveSheet.DisplayAutomaticPageBreaks = True,倒是能判断了,速度又成蜗牛了。怎么办?

TA的精华主题

TA的得分主题

发表于 2023-3-23 16:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
vistababy 发表于 2023-3-23 14:29
但是发现加了这行,在行高增加的时候动态变化,不能监测到真实的页码了。比如我原来只有1页,行高不停地 ...

若是每調整一行行高, 就算一次頁數. 不慢才是奇蹟!!!!

反正, 工作表看得分頁線, 執行程序必定慢!!

計算頁數//也可如下
vp = ActiveSheet.VPageBreaks.Count + 1
hp = ActiveSheet.HPageBreaks.Count + 1
pcunt = vp * hp
MsgBox pcunt

但不取消分頁線, 仍是苦工~~

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 17:14 | 显示全部楼层
我想了一下,够用了,如果是需要判断总页码的时候,页数一般比较少,慢不了多少,如果行数多,批量增高,根本无需看页码,体验神速。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 17:21 | 显示全部楼层
准提部林 发表于 2023-3-23 16:07
若是每調整一行行高, 就算一次頁數. 不慢才是奇蹟!!!!

反正, 工作表看得分頁線, 執行程序必定慢!!

感谢。不过我觉得可以了。我确实有程序是对选中的行数增高,循环一次就要检查一下总页数,所以慢,但一般页数只有几页,影响不大,批量行高不用管页数,可以尽管用ActiveSheet.DisplayAutomaticPageBreaks = False,速度就上来了。确实是够了。谢谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 05:52 , Processed in 0.046703 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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